gpt4 book ai didi

c - 将二维指针数组传递给具有一维指针数组参数的函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:39 24 4
gpt4 key购买 nike

我目前正在做一个项目,我将把一个二维指针数组传递给一个函数。下面是函数实现:

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 是二维数组,但它使用单个指针。以前,我曾经使用双指针传递二维数组。在我的主体中,我已经设置了一个二维数组(双指针)并找到了如何将它发送到该函数的方法。

以下是我尝试过但不起作用的函数调用:

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;
}

最佳答案

您不能将 numbers_table 传递给您的函数,因为它是 int ** 类型,而您的函数需要 int *。此外,您不能传递 &numbers_table,因为它是 int *** 类型。
要将指向 int 的指针传递给您的函数,请传递 &numbers_table[0][0],类型为 int *

affiche_Tab2D(&numbers_table[0][0], 10, 10);  

根据 OP 的评论:

I would like to know more about the explanation of the declaration int (*lignePtr)[m] and lignePtr = (int (*)[m]) ptr; Its a bit confusing to understand.

int (*lingPtr)[m] 是指向包含 m 元素的(整数)数组的指针。
lignePtr = (int (*)[m]) ptr;ptr 转换为指向 m 元素数组的指针。

关于c - 将二维指针数组传递给具有一维指针数组参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19466268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com