gpt4 book ai didi

c - 通过引用传递 C 指针?

转载 作者:行者123 更新时间:2023-11-30 15:09:59 26 4
gpt4 key购买 nike

我发现了一些通过引用传递指针的条目,但并没有真正理解它们。

我编写了这个函数来在链表中插入一个节点。它似乎在函数内工作,但 linkedList 指针的变化不会影响主函数中的指针。有一个简单的解决办法吗?在类示例中,linkedList 指针是全局声明的,但我认为最好将其传递出去,这样我就可以创建多个链表。

void insert(node* linkedList, int value)
{
node* newNode = malloc(sizeof(node));

if (newNode == NULL)
{
// failed to make node
printf("Failed to insert new node!\n");
return;
}

newNode->n = value;

printf("\n");
printf("Before insert: \n");
printf("\n");

printf("linkedList ptr : %p\n", linkedList);
printf("linkedList->n : %i\n", linkedList->n);
printf("LinkedList->next : %p\n", linkedList->next);

printf("\n");
printf("newNode ptr : %p\n", newNode);
printf("newNode->n : %i\n", newNode->n);
printf("newNode->next : %p\n", newNode->next);

newNode->next = linkedList;
linkedList = newNode;

printf("\n");
printf("After insert: \n");
printf("\n");

printf("linkedList ptr : %p\n", linkedList);
printf("linkedList->n : %i\n", linkedList->n);
printf("LinkedList->next : %p\n", linkedList->next);

printf("\n");
printf("newNode ptr : %p\n", newNode);
printf("newNode->n : %i\n", newNode->n);
printf("newNode->next : %p\n", newNode->next);
}

最佳答案

我认为一个简单的解决方法是更改​​您的函数以返回新的列表头:

Node * insert( struct Node * list, int value )
{
...
}

像这样使用:

myList = insert( myList, <em>someNumber</em> )

<小时/>

如果没有图片,很难解释您想要的用例。您想要将列表头指针传递给 insert() 。里面insert()然后,您可以修改该指针所指向的内容(取消引用它)以更改列表头。

像这样声明你的函数:

void insert( struct Node ** ioList, int value ) { ... }

这里ioList类型为Node ** ,它是一个指向 Node 的指针。 。 (经验法则:从右到左读取类型)

这样调用它:

struct Node * myList = /*create list here*/ ;
insert( &myList, /*some number*/ );

&运算符创建一个指向其参数的指针。所以我们得到一个指向 myList 的指针。 (这是一个指向 Node 的指针)

现在我们有一个指向 myList 的指针.

内部insert ,分配给*ioList改变什么ioList指向 ( myList ):

// make myList point to the new list head:
*ioList = /*new list head*/

关于c - 通过引用传递 C 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36433983/

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