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

关于c语言指针的小问题,希望大神指教

关于c语言指针的小问题,希望大神指教

C
慕粉13202587281 2017-01-15 18:13:30
我打印出的结果是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);
}

建议:好好看下书,看下函数的调用过程和指针的内容。

查看完整回答
1 反对 回复 2017-01-15
  • 慕粉13202587281
    慕粉13202587281
    函数里面的p = &b不就是把a的地址赋值给pa,那*pa的值不就改变了吗
  • 慕粉13202587281
    慕粉13202587281
    是b的地址赋值给pa
  • 眼前的黑不是黑zz
    眼前的黑不是黑zz
    第一,你不要说什么*pa的值,是a的值,你想改变的就是变量a的值,pa是指针,存放a的地址罢了, 第二,纠正,是b的地址赋值给p,不是pa,所以a的值没改变。
点击展开后面3
?
AIxer

TA贡献22条经验 获得超13个赞

首先你要搞清楚C语言中的按值传递机制,你还要去了解下C语言中变量作用域的问题,顺便把内存四区模型也给学了,然后你就自动明白了,具体你再看看其他人的解答咯~
查看完整回答
反对 回复 2017-01-15
?
NightSong

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

pa传进去的指针变量到change里面变成了副本,因为指针也是变量,他会自动进行传值调用。,你把change(pa)改成change(&a)就好了,这里面传出去的就是a的真实的地址!

查看完整回答
反对 回复 2017-01-15
  • AIxer
    AIxer
    恐怕改为change(&a)也不一定能得到想要的结果~,b不是全局变量
  • NightSong
    NightSong
    你很棒棒噢,我的哥
  • 3 回答
  • 0 关注
  • 1619 浏览

添加回答

举报

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