Erin_coast 2021-10-07 17:05 采纳率: 63.6%
浏览 55
已结题

结构体中指针指向的问题

b = a是重新定义了一个结构体对象,b.name获得的是a的地址,在改变b.name的值时改变了b.name的指向,为何会影响a.name的值与指向

struct stu{
    char *name,gender;
    int score;
};
main(){
    struct stu a = {NULL,'m',290},b;
    a.name = (char*)malloc(10);
    strcpy(a.name,"Qian");
    b = a;b.gender = 'f';
    b.score = 350;
    strcpy(b.name,"Qian");
    printf("%s,%c,%d,",a.name,a.gender,a.score);
    printf("%s,%c,%d\n",b.name,b.gender,b.score);
    return 0;
}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2021-10-07 18:48
    关注

    因为结构体里, char *name; name定义的是个指针变量,定义结构体对象时,并没有分配额外的空间给它们,改了下,供参考:

    
    ```c++
    #include<stdio.h>
    struct stu{
        char *name,gender;
        int score;
    };
    main()
    {
        struct stu a = {NULL,'m',290},b;
        a.name = (char*)malloc(10);
        strcpy(a.name,"Qian");
        b = a;
        b.gender = 'f';
        b.score = 350;
        b.name = (char*)malloc(10);
        strcpy(b.name,"Aian");
        printf("%s,%c,%d,\n",a.name,a.gender,a.score);
        printf("%s,%c,%d\n",b.name,b.gender,b.score);
      
        return 0;
    }
    
    

    ```

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

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月7日

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办