IDEAR___ 2023-10-22 13:22 采纳率: 25%
浏览 16

为什么结构体指针传参后不能改变该结构体指针


#include<stdio.h>
#include<stdlib.h>
struct Node
{
    int a;
};
void change(struct Node *p)
{
    struct Node * b=(struct Node *) malloc (sizeof(struct Node));
    b->a=0;
    p=b;
    printf("1: %d\n",p==NULL);

}
int main()
{
    struct Node *p=NULL;
    change(p);
    printf("2: %d\n",p==NULL);

}

输出是
1:0
2:1
意味着把b给p时,p不空了,但是函数结束出来,p仍然是NULL,根本没有改变p,可是p是指针,传参传进去的不是地址吗为什么还改变不了呢

  • 写回答

2条回答 默认 最新

  • micthis 2023-10-22 13:36
    关注

    传地址其实是实参与形参指向同一个变量,假设实参a指向x,形参b接收实参传过来的值后形参b也指向了x。如果令形参b改为指向y,并不能改变实参a的指向,a还是指向x。
    要在被调函数中改变实参a的指向,必须把a的地址传过来,这样才能改变a的值。
    因为a本身是指针,形参的类型就得是指向指针的指针才行。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 10月22日