为了账号安全,请及时绑定邮箱和手机立即绑定

求助,有关C结构体变量的引用的基础问题

求助,有关C结构体变量的引用的基础问题

C
hitman 2017-02-13 20:06:58
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct stu{ char *name,gender; int score; }STU; void f(char *p) { /*p=(char*)malloc(10);*/ strcpy(p,"qian"); } main() { STU  a={NULL,'m',290}; a.name=(char *)malloc(10); strcpy(a.name,"zhao"); f(a.name); printf("%s\n",a.name); }为什么加上注释掉的那句后,输出的结果就变了?malloc函数不就是分配了地址和空间吗?
查看完整描述

3 回答

已采纳
?
angie

TA贡献56条经验 获得超8个赞

因为你没有完全理解指针的概念。当你去掉注释之后,p会获得一个新值,就不指向原来的那块空间,所以即便拷贝新值给p,a.name 还是 zhao;而如果没有malloc,p和a.name指向同一块空间,所以给p拷贝新值,就会覆盖原来的值,变成了qian
查看完整回答
反对 回复 2017-02-14
  • hitman
    hitman
    是不是说malloc函数把原来放在p里的a.name里面的地址换成了另外一个新的地址,所以后面的操作和a.name没有关系了?
  • angie
    angie
    可以这么理解
?
慕粉1239569501

TA贡献2条经验 获得超0个赞

因为函数的入参是只是一个指针的备份,一个新的指针,如果想改变指针的内容,需要入参设置成**p,内容写成*p= malloc() ;调用处传入指针的地址
查看完整回答
反对 回复 2017-02-14
  • 3 回答
  • 0 关注
  • 1405 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信