gpt4 book ai didi

C 传递一个列表作为参数

转载 作者:太空狗 更新时间:2023-10-29 14:51:57 25 4
gpt4 key购买 nike

所以我将列表定义为全局变量:

typedef struct center {

char center_name[100];

char hostname[100];

int port;

struct center *next_center;

} center;

我需要向列表中添加元素。但是我需要添加的这些元素在一个文件中,所以:

 int main(int argc, char** argv) {
center *head = NULL;
parse(argv, head);
}

parse 是一个函数,它读取文件并将这些读取的元素添加到一个新的中心(所有这些都有效,它双重检查)

void parser (char** argv, center *head) {
//read the elements i need to add
//creates a newCenter and adds the elements read to the new center
//this far it works
addToCenter(newCenter, head);
}

哪里:

addToCenter(center *newCenter, center *head){
//adds newCenter to the list
if (head == null)
head = newCenter;
else {
//find last element
lastelement.next_center = newCenter;
}

}

一切正常,除了 Main 上的列表总是返回 null。换句话说,引用没有被修改。我不明白为什么,因为我传递了一个指向列表的指针。

虽然我的另一个解决方案是将列表的头变量创建为全局变量,但最好避免这些情况。

提前致谢。

最佳答案

您的列表头正在按值传递。您需要通过地址 传递头指针,以防它被修改(它将被修改)。

例子:

addToCenter(center *newCenter, center *head) // <=== note: passed by value
{
//adds newCenter to the list
if (head == null)
head = newCenter; // <=== note: modified local stack parameter only.
else {
//find last element
lastelement.next_center = newCenter;
}
}

应该是:

addToCenter(center *newCenter, center **head) // <=== note: now passed by address
{
//adds newCenter to the list
if (*head == null)
*head = newCenter; // <=== note: now modifies the source pointer.
else {
//find last element
lastelement.next_center = newCenter;
}
}

与解析类似:

void parser (char** argv, center **head) // <=== again, the head-pointer's *address*
{
//read the elements i need to add
//creates a newCenter and adds the elements read to the new center
//this far it works
addToCenter(newCenter, head); // <=== just forward it on.
}

最后回到主界面:

int main(int argc, char** argv) 
{
center *head = NULL;
parse(argv, &head); // <=== note: passing address of the head-pointer. (thus a dbl-pointer).
}

关于C 传递一个列表作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14537556/

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