gpt4 book ai didi

c - 将指向数组的指针传递给另一个函数中的函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:35 26 4
gpt4 key购买 nike

我将我的信息存储在指向结构的指针数组中。换句话说,数组的每个元素都是一个指向链表的指针。

我不知道数组应该有多长,所以我没有在 main() 函数中初始化数组,而是初始化双指针

struct graph** graph_array;

然后一旦我获得数组的长度,我尝试使用函数 GraphInitialize 初始化 graph_array 的每个元素:

    int GraphInitialize(struct graph ***graph_array, int vertices)
{
*graph_array = malloc(sizeof **graph_array * vertices);
if (*graph_array)
{
int i;
for (i = 0; i < vertices; i++)
{
(*graph_array)[i] = NULL; // parentheses matter here!
}
}
else
{
return -1;
}

return 0;
}

但问题是:我不直接从 main() 调用 GraphIntialize。相反,我首先从 main 调用 getdata(),并将指向 graph_array 的指针传递给 getdata,如下所示。

    getdata(argc, argv, vertpt, edgept, &graph_array)

int getdata(int argc, char *argv[], int *verts, int *edges, struct graph* **graph_array)

然后 getdata 从我的输入文件中检索顶点数,并使用它来调用 GraphInitialize:

    if ((GraphInitialize(&graph_array, *verts)) == -1)
{
printf("GraphCreate failed");
return 0;
}

这会导致错误:“预期的‘struct graph 3ASTERISKS(三重指针)’但参数类型为‘struct graph 4ASTERISKS(四重指针)’。这太令人困惑了。如果有办法我可以解决这个问题不需要所有这些可能是最佳答案的指针,但我正在尝试创建和抽象数据类型,因此我不想在我的主要函数中创建一个 graph_array 数组。

最佳答案

我想,你不必在这里使用“&”:

if ((GraphInitialize(&graph_array, *verts)) == -1)

您想初始化一个双指针 (graph**),但为此您将指向它的指针传递给您的函数,因此它们都得到一个三指针 (graph ***) 作为输入。调用链看起来像这样(这更像是一个伪代码):

void GraphInitialize(struct graph *** graph_array);

void getdata(..., struct graph *** graph_array )
{
...
GraphInitialize(graph_array); //graph_array here is the same triple pointer, that 'getdata' recieved as an input, so there is no need to use '&' operator.
...
}

void main()
{
graph ** graph_array = ...; // this is a double pointer, obviously
getdata( ..., &graph_array); //getdata gets a triple pointer as an input, so we get the graph_array address by '&' operator;
}

所以正确的形式是

if ((GraphInitialize(graph_array, *verts)) == -1)

关于c - 将指向数组的指针传递给另一个函数中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597740/

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