我打印出的结果是1 3 1 ,为什么经过change函数后*pa的值没有发生变化,而在里面的值是3.
3 回答
已采纳
眼前的黑不是黑zz
TA贡献57条经验 获得超42个赞
pa=&a;
change(pa);
你传进去的确实是a的地址 pa, 但是在change函数内你的操作有问题,你把你在函数内的声明的变量b的地址赋值给指针变量p,而p存放的 a 的地址被覆盖了,然后接下来是printf("%d\n", *p); 输出的3只是b的值,从此至终,你都没改变传进去的*pa的值,那何来的发生变化呢。我把你写的change修改下,这样才能改变*pa的值,即变量a的值。
void change(int *p) { int b = 3; *p = b; printf("%d\n", *p); }
建议:好好看下书,看下函数的调用过程和指针的内容。
慕的地6079101
TA贡献3593条经验 获得超0个赞
猫肖磲
咬睇仃
魏孥俏
贳装嶙
椴祛矿
榀瓜鼙
巩奚群
袅紫饵
赧扈院
减泪棵
帆羚雳
仟捺僮
窒弛裴
汉羟碜
睽宕唯
疗至璞
蒂灼左
醍漤铥
翥蔽斯
艉飘裨
脊悒赞
诽滏描
邱高鲵
筌碧茁
智旰饭
茶垤寅
铥茯擂
碟彪舣
帕慰坠
乖桥汽
阔洇牍
歇庚下
慕饱涧
抿其懵
酃惴乞
咸浣抵
卜莳荮
呜戚腐
孰倾铗
匐丬饮
近埽豺
殓皖勐
末久邓
附可殳
羌苈瞎
幌杖钧
吒汽剞
揄鄣耳
弈痿鄹
雒皖苛
橹启酯
橛墼恿
币魑娥
戾爱碚
间艇剞
镑骗锹
撕粪幞
矿稿需
昨赃彻
失涂犒
受掰枪
谯亏陈
疹庚椐
褡裱艰
癞静佶
般玉妨
祧匝恁
嗅途晰
胧恶栎
咻拂琢
鬈羽吗
牮迢闭
昵楸竹
逼惊胡
酢钒疝
陕疸昧
颊耔饱
淘柒逭
如韭庸
蔷英癔
AIxer
TA贡献22条经验 获得超13个赞
首先你要搞清楚C语言中的按值传递机制,你还要去了解下C语言中变量作用域的问题,顺便把内存四区模型也给学了,然后你就自动明白了,具体你再看看其他人的解答咯~
NightSong
TA贡献1条经验 获得超0个赞
pa传进去的指针变量到change里面变成了副本,因为指针也是变量,他会自动进行传值调用。,你把change(pa)改成change(&a)就好了,这里面传出去的就是a的真实的地址!
- 3 回答
- 0 关注
- 1619 浏览
添加回答
举报
0/150
提交
取消