gpt4 book ai didi

c - **在指针中的意义-C语言

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

我正在尝试用 C 语言对链表进行一些操作。我是新手,对函数 append() 有点困惑。

他们在函数中传递参数,如struct node **q。他们将它与 *q 一起使用。

C 语言的append()函数:

void append(struct node **q, int num) {
struct node *temp, *r;
if(*q==NULL) {
temp=malloc(sizeof(struct node));
temp->data=num;
temp->link=NULL;
*q=temp;
}
else {
temp=*q;
while(temp->link!=NULL)
temp=temp->link;
r=malloc(sizeof(struct node));
r->data=num;
r->link=NULL;
temp->link=r;
}
}

我无法理解:-

  1. 为什么他们在参数中使用 **q 而在代码部分使用 *q
  2. 有什么区别?和
  3. 最好的方法是什么?

如有任何帮助,我们将不胜感激。

最佳答案

请记住,C 中的参数是按值 传递的,这意味着它们的值被复制。因此,要更改函数中的参数,您必须通过引用 传递它。在 C 中,这是通过使用指针来完成的。但是,传递给函数的指针本身也是按值传递,因此要能够更改该指针,您必须通过引用传递,因此您传递了它作为指向指针的指针。


对于您的特定代码,函数 append 修改了您传递给它的指针,因此您需要通过引用传递指针地址。调用者做类似的事情:

struct node *queue;
append(&queue, ...);

然后当append返回时,q可能会改变。


*q 在函数中的使用是因为一元运算符* 用于解引用指针。因此,如果您有一个指针 q,那么 *q 将是 q 指向的值。对于您的函数,由于 q 是指向指针的指针,因此 *q 将导致原始指针。

如果使用我上面的简短代码段调用,则 *q 将返回 queue 指针。

关于c - **在指针中的意义-C语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17781485/

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