【发布时间】:2018-03-28 04:52:48
【问题描述】:
假设您有一个函数,函数输出将是链表的头尾地址(用于将链表复制到另一个地址的函数):
struct path *copyPath(struct path *head) {
struct path *temp = malloc(sizeof (struct path));
// array of newHead and newTail
struct path *resultPath[2];
struct path *newHead = NULL;
struct path *newTail = NULL;
while (head != NULL) {
temp = malloc(sizeof (struct path));
if (newHead == NULL) {
// Add a new node to the first of list and save newHead as the beginning of the list
} else {
// Add the other nodes and save the last node address as newTail
}
head = head -> next;
}
resultPath[0] = newHead;
resultPath[1] = newTail;
return resultPath;
}
我定义了一个struct path 的数组并将其返回。在主函数中定义了一个数组:
struct path *newPath;
newPath = copyPath(path_head, nextNode);
当我运行它时,我在 newPath 中没有任何东西,它是空的。
那么,返回这些地址的最佳方式是什么?为什么我在 newPath 中没有它?
另外,当我使用时:
struct path *newPath[2];
newPath = copyPath(path_head, nextNode);
我有一个错误:error: assignment to expression with array type
如何将这两个值传递给主函数?
【问题讨论】:
-
1从path*[]转换为path*是危险的。2打开你的编译器警告将帮助你调试你的程序。3minimal reproducible example 请。 -
没有调用上下文...我们怎么能说一些有趣的事情呢?另外,
resultPath是一个指向路径的指针数组,您返回指向路径的指针。请使用好的编译器并仔细阅读警告信息。当有人说过马路很危险时,你至少需要四处看看。 -
@user202729 不,这不是我的答案。我在 Google、SO 等上搜索过。
-
struct path *resultPath[2];被声明为copyPath的本地。当copyPath返回时,所有局部变量都被销毁(函数栈帧内存被释放以供重用)。为了返回resultPath,您需要为其动态分配存储空间并返回一个指针来执行此操作——正如上面已经提供的所有链接中所解释的那样。
标签: c arrays function linked-list