sun_and_pen 2024-01-26 17:56 采纳率: 75%
浏览 15
已结题

结构体指针赋值和地址的问题

对于以下这个结构体,为什么用“p->next =”改变p就会影响head,而用“p = ”改变p就不会影响呢?


struct ListNode {
    int val;
    struct ListNode* next;
};

影响head:p输出为1,head输出为1;


void  reverseKGroup(struct ListNode* head) {
    struct ListNode *p = head;
    p->next = NULL;
    ListOutput(p);//输出
    ListOutput(head);//输出
}

不影响head:p输出为25,head输出为123;

void  reverseKGroup(struct ListNode* head) {
    struct ListNode *p = head;
    p = p->next;
    ListOutput(p);//输出
    ListOutput(head);//输出
}

  • 写回答

2条回答 默认 最新

  • GameTomato 2024-01-26 18:07
    关注

    在你的代码中,struct ListNode是一个链表节点的结构体,有一个整数成员val和一个指向下一个节点的指针next。
    在函数reverseKGroup中,你传递的参数是一个指向结构体的指针head。在函数内部,使用struct ListNode *p = head; 将p指向了和head指向同一个结构体。因为结构体是值传递,所以p和head都指向相同的内存。
    当你使用 p->next = NULL; 时,实际上是修改了结构体中next成员的值,这会影响到你在外部传递的head指针,因为它们指向相同的结构体。
    而当你使用 p = p->next; 时,实际上是修改了指针p指向的位置,将它指向了链表中的下一个节点,但这并不影响外部传递的head指针,因为head和p是不同的指针。

    希望能帮到你,加油~~~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月10日
  • 已采纳回答 2月2日
  • 创建了问题 1月26日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析