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

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


#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日

悬赏问题

  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!
  • ¥15 这个如何解决详细步骤