我目前正在做一个项目,我将把一个2D指针数组传递给一个函数。这是函数实现:
void
affiche_Tab2D(int *ptr, int n, int m)
{
if (n>0 && m>0 && ptr!=NULL)
{
int (*lignePtr)[m]; // <-- Its my first time to see this declaration
lignePtr = (int (*)[m]) ptr; // <-- and this too....
for (int i = 0 ; i < n ; i++)
{
for (int j = 0 ; j < m ; j++)
{
printf("%5d ",lignePtr[i][j]);
}
printf("\b\n");
}
}
}
请注意,ptr是2D数组,但它使用单个指针。之前,我曾经使用双指针传递2D数组。在我的主要内容中,我设置了一个2D数组(双指针),并找到了如何将其发送到该函数的方法。
以下是我尝试的函数调用,但不起作用:
int
main(int argc, char * argv[])
{
int ** numbers_table;
int i, j;
numbers_table = (int **)malloc(10 * sizeof(int *));
for(i = 0; i < 10; i++)
numbers_table[i] = (int *)malloc(10 * sizeof(int));
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
numbers_table[i][j] = i + j;
// Failed function call 1
// affiche_Tab2D(numbers_table, 10, 10);
// Failed function call 2
// affiche_Tab2D(&numbers_table, 10, 10);
for(i = 0; i < 10; i++)
free(numbers_table[i]);
free(numbers_table);
return 0;
}
答案 0 :(得分:2)
您无法将numbers_table
传递给您的函数,因为它的类型为int **
而您的函数期望int *
。此外,您无法通过&numbers_table
,因为它的类型为int ***
将int
的指针传递给函数传递&numbers_table[0][0]
,类型为int *
。
affiche_Tab2D(&numbers_table[0][0], 10, 10);
根据OP的评论:
我想了解更多关于声明
int (*lignePtr)[m]
和lignePtr = (int (*)[m]) ptr;
的解释,这有点令人困惑。
int (*lingPtr)[m]
是指向m
个元素的数组(整数)的指针
lignePtr = (int (*)[m]) ptr;
正在将ptr
转换为指向m
元素数组的指针。