C语言结构体传函数:调用时为何无需使用&符号?
为什么这段C代码调用函数时不需要用&符号?
首先得明确:C语言里没有原生的传引用调用,所有函数参数都是传值传递。你之前的误解可能是把“通过指针传递实现类似引用的效果”和真正的传引用搞混了,咱们拆解下这段代码的逻辑:
head的本质是指针变量
代码里的head是struct node*类型的指针,它本身存储的就是链表头节点在内存中的地址。当你写traversal(head)时,其实是把head里存的地址值复制了一份,传给函数的形参ptr。这时候ptr和head指向同一块内存(也就是链表的头节点),所以在traversal里能通过ptr访问到链表的所有节点数据。什么时候才需要用&?
&是用来取变量的地址,只有当你需要让函数修改外部变量本身的内容时才需要用:- 比如要修改一个普通
int变量的值,函数参数得是int*,调用时要传&变量名,这样函数才能通过指针修改外部变量的数值。 - 如果你的需求是修改
head这个指针变量本身(比如让head指向链表的第二个节点),那函数参数得是struct node**,调用时就要传&head,因为这时候要修改的是head里存储的地址值。
- 比如要修改一个普通
回到你的代码
traversal函数只是遍历链表,不需要修改外部的head指针本身,只需要拿到头节点的地址去访问链表内容就行。所以直接传head(也就是地址值)就足够,根本不需要用&取地址。
内容的提问来源于stack exchange,提问作者Mohan Singh Bisht
相关产品推荐
相关产品推荐

