gpt4 book ai didi

c - 如何修改已传递给 C 函数的指针?

转载 作者:行者123 更新时间:2023-11-30 16:12:19 25 4
gpt4 key购买 nike

所以,我有一些代码,类似于下面的代码,用于将结构添加到结构列表中:

void barPush(BarList * list,Bar * bar)
{
// if there is no move to add, then we are done
if (bar == NULL) return;//EMPTY_LIST;

// allocate space for the new node
BarList * newNode = malloc(sizeof(BarList));

// assign the right values
newNode->val = bar;
newNode->nextBar = list;

// and set list to be equal to the new head of the list
list = newNode; // This line works, but list only changes inside of this function
}

这些结构定义如下:

typedef struct Bar
{
// this isn't too important
} Bar;

#define EMPTY_LIST NULL

typedef struct BarList
{
Bar * val;
struct BarList * nextBar;
} BarList;

然后在另一个文件中我执行如下操作:

BarList * l;

l = EMPTY_LIST;
barPush(l,&b1); // b1 and b2 are just Bar's
barPush(l,&b2);

但是,在此之后,l仍然指向EMPTY_LIST,而不是barPush内部创建的修改版本。如果我想修改它,我是否必须将列表作为指向指针的指针传递,或者是否需要其他一些黑暗咒语?

最佳答案

如果你想这样做,你需要传递一个指针到一个指针。

void barPush(BarList ** list,Bar * bar)
{
if (list == NULL) return; // need to pass in the pointer to your pointer to your list.

// if there is no move to add, then we are done
if (bar == NULL) return;

// allocate space for the new node
BarList * newNode = malloc(sizeof(BarList));

// assign the right values
newNode->val = bar;
newNode->nextBar = *list;

// and set the contents of the pointer to the pointer to the head of the list
// (ie: the pointer the the head of the list) to the new node.
*list = newNode;
}

然后像这样使用它:

BarList * l;

l = EMPTY_LIST;
barPush(&l,&b1); // b1 and b2 are just Bar's
barPush(&l,&b2);

Jonathan Leffler 建议在评论中返回新的列表头:

BarList *barPush(BarList *list,Bar *bar)
{
// if there is no move to add, then we are done - return unmodified list.
if (bar == NULL) return list;

// allocate space for the new node
BarList * newNode = malloc(sizeof(BarList));

// assign the right values
newNode->val = bar;
newNode->nextBar = list;

// return the new head of the list.
return newNode;
}

用法变为:

BarList * l;

l = EMPTY_LIST;
l = barPush(l,&b1); // b1 and b2 are just Bar's
l = barPush(l,&b2);

关于c - 如何修改已传递给 C 函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58358966/

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