You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言结构体传函数:调用时为何无需使用&符号?

为什么这段C代码调用函数时不需要用&符号?

首先得明确:C语言里没有原生的传引用调用,所有函数参数都是传值传递。你之前的误解可能是把“通过指针传递实现类似引用的效果”和真正的传引用搞混了,咱们拆解下这段代码的逻辑:

  1. head的本质是指针变量
    代码里的head是struct node*类型的指针,它本身存储的就是链表头节点在内存中的地址。当你写traversal(head)时,其实是把head里存的地址值复制了一份,传给函数的形参ptr。这时候ptr和head指向同一块内存(也就是链表的头节点),所以在traversal里能通过ptr访问到链表的所有节点数据。

  2. 什么时候才需要用&?
    &是用来取变量的地址,只有当你需要让函数修改外部变量本身的内容时才需要用:

    • 比如要修改一个普通int变量的值,函数参数得是int*,调用时要传&变量名,这样函数才能通过指针修改外部变量的数值。
    • 如果你的需求是修改head这个指针变量本身(比如让head指向链表的第二个节点),那函数参数得是struct node**,调用时就要传&head,因为这时候要修改的是head里存储的地址值。
  3. 回到你的代码
    traversal函数只是遍历链表,不需要修改外部的head指针本身,只需要拿到头节点的地址去访问链表内容就行。所以直接传head(也就是地址值)就足够,根本不需要用&取地址。

内容的提问来源于stack exchange,提问作者Mohan Singh Bisht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:47:26