我剛剛開始修改多維陣列中的指標,并試圖將陣列傳遞給 void 函式。編譯器只是拋出了一個錯誤。我需要將陣列完全作為指標傳遞,然后通過參考更改它。
#include <stdio.h>
#include <stdlib.h>
void Func(int** matrix, int sizeFirst, int sizeSecond)
{
for (int i = 0; i < sizeFirst; i )
{
for (int j = 0; j < sizeSecond; j )
{
printf("%d\n", matrix[i][j]);
}
}
}
int main()
{
int array[2][3] = {
{5,8,2},
{1,3,6}
};
int sizeMain = sizeof(array)/sizeof(array[0]);
int sizeInner = sizeof(array[0])/sizeof(array[0][0]);
Func(array, sizeMain, sizeInner);
return 0;
}
uj5u.com熱心網友回復:
二維陣列不是指向指標的指標。您的代碼無效,因為 Func 不知道每行有多少列。此外,使用正確的大小和索引型別
void Func(size_t sizeFirst, size_t sizeSecond, int (*matrix)[sizeSecond])
{
for (int i = 0; i < sizeFirst; i )
{
for (int j = 0; j < sizeSecond; j )
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main()
{
int array[2][3] = {
{5,8,2},
{1,3,6}
};
size_t sizeMain = sizeof(array)/sizeof(array[0]);
size_t sizeInner = sizeof(array[0])/sizeof(array[0][0]);
Func(sizeMain, sizeInner, array);
return 0;
}
https://godbolt.org/z/Ejfrdd3nK
uj5u.com熱心網友回復:
使用指向 VLA 的指標,您可以保留引數型別中的所有維度,然后讓 C 為您進行多維縮放。
在舊版本的 C 中,您需要手動計算點,記住從右邊開始的第一個維度移動 1(按 sizeof(type) 縮放,C 為您做的),第二個從右邊開始的第一個維度,第三個右邊的第一個維度乘以右邊的第二個維度,依此類推。
它有點像數字中的數字(單位,十,百,...),除了下一個縮放是前一個縮放乘以前一個維度而不是一個常數基數。(你可以讓十進制數字將十進制數轉換?組通過讓它減去一些&decdigits[a][b][c]和 &decdigits[0][0][0] 其中decdigits的一些decdigits[10][10][10],即:
char decdigits[10][10][10]; printf("%d\n", (int)(&decdigits[1][2][3] - &decdigits[0][0][0])) /*prints 123*/;)
#include <stdio.h>
void Func( int sizeFirst, int sizeSecond, int (*matrix)[sizeFirst][sizeSecond])
{
for (int i = 0; i < sizeof((*matrix))/sizeof((*matrix)[0]) ; i )
{
for (int j = 0; j < sizeof((*matrix)[0])/sizeof((*matrix)[0][0]) ; j )
{
printf("%d ", (*matrix)[i][j]);
}
puts("");
}
}
void Func_89( int sizeFirst, int sizeSecond, int *matrix)
{
for (int i = 0; i < sizeFirst; i )
{
for (int j = 0; j < sizeSecond; j )
{
printf("%d ", matrix[i*sizeSecond j]);
}
puts("");
}
}
int main()
{
int array[2][3] = {
{5,8,2},
{1,3,6}
};
int sizeMain = sizeof(array)/sizeof(array[0]);
int sizeInner = sizeof(array[0])/sizeof(array[0][0]);
Func(sizeMain, sizeInner,&array );
puts("===");
Func_89(sizeMain, sizeInner,&array[0][0] );
//char decdigits[10][10][10]; printf("%d\n", (int)(&decdigits[1][2][3] - &decdigits[0][0][0])); //123
return 0;
}
uj5u.com熱心網友回復:
首先你要明白什么int **代表,它代表指向整數指標的指標,這是一個例子:
int a = 10;
int *p = &a; // 'p' points to 'a`
int **pp = &p; // 'pp' points to 'p' (pointer to integer)
因此,您不能int **用于整數陣列。現在已經不礙事了,讓我們看看你能做些什么(解決方案)
您可以簡單地在這樣的函式定義中添加指向整數陣列的指標
void Func(int *matrix[], int rows, int cols)
或者你可以簡單地做
void Func(int matrix[rows][cols])
注意:字串陣列或二維字符陣列 ( char array[][]) 可以表示為char**
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338883.html
下一篇:顯示佇列洗掉后的資料
