今天在将二维数组传递给函数时遇到了一些问题,后来我找到了一些解决方案,例如A和B。 我知道二维数组作为一维存储在连续内存中。所以在我看来,实际上不存在二维点,编译器将这些连续的数字分开并提出了“二维”概念。
我的问题是:在 C 中,我明确告诉编译器参数是“int**”后,为什么它没有传递“二维”点?
有人可能会指出“在 C 中你没有告诉编译器组长度”,我认为它知道这个信息,因为如果你尝试将 12 个元素的普通内存重新解释为 arr[2][6] 它将是类似“void printArr(int _arr[][6], int _columns, int _rows)”的错误。
有点困惑,请帮忙...
int arr[][3]={{1,2,3},{5,6,7},{9,10,11},{13,14,15}};
void printArr(int _arr[][3], int _columns, int _rows){ //----->A
void printArr(int (* _arr)[3], int _columns, int _rows){//---->B
void printArr(int** _arr, int _columns, int _rows){//--------->C
for(int r=0; r< _rows; r++){
for (int c=0; c<_columns; c++)
//printf("%4d,", _arr[r][c]);
printf("%4d,", *(*(_arr+r)+c));
}
}
int main(){
printArr(arr, columns, rows);
}
最佳答案
数组会衰减为指针,这意味着如果您有一个数组数组 int arr[x][y]
它可以衰减为指向数组的指针 int (*arr)[y ]
。
int ** arr
因此将是退化指针数组 int *arr[x]
的一个版本,它是与您的数组不兼容的类型。
关于c - 将指针的二维数组传递给函数 C 的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4440248/