m的值是怎样变成20的?

mapping_ping 2008-10-31 08:08:22
m的值是怎样变成20的?有点乱,没有想明白,请帮忙分析分析。
int m = 10;
int *p;
p = &m;
*p = 20;
printf("m = %d\n",m);
...全文
189 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
Forest822 2008-11-07
  • 打赏
  • 举报
回复
p = &m;
*p = 20;
p指向了m的内存单元 并修改值为20
好尴尬奥 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 nuaamzc 的回复:]
引用 1 楼 zmlovelx 的回复:
p = &m;
*p = 20;
p指向了m的内存单元 并修改值为20

刚刚发错了
up
[/Quote]

自己发表一个简单的看法
p=&m
也就是此时的p取得的是m的地址,实际m的值为发生改变
*p是指向了m的实际值
也就是说*p=(m=20)

可不可以这样理解呢?
西园软件 2008-11-07
  • 打赏
  • 举报
回复
int m = 10;
int *p;
p = &m;
*p = 20;
printf("m = %d\n",m);

变量,实际上是一个存储单元或者存储区域,说白了,就是一个放数据的地方或容器.,

它有两个属性,名字和地址.通过名字和地址,你都可以访问这个变量,说白了,就是可以通过变量名和地址往这个存储单元里放数,或者取数.

就象学校是放学生的地方,学校有个名字,也有个门牌号表示的地址,你通过名字和地址,都可以找到这个学校来.


这两句程序中,m是变量名;p=&m,是变量的地址.

当你改变指针变量p(p里面的值是m的地址)所指向的存储单元(实际上就是变量m)里的值,事实上,就是改变了m的值.
XiaoMii 2008-11-07
  • 打赏
  • 举报
回复
建议看下值调用和引用调用,就会明白
XiaoMii 2008-11-07
  • 打赏
  • 举报
回复
这其实就是一个引用调用的原理
霍大脚 2008-11-07
  • 打赏
  • 举报
回复
引用与指针这个问题应该是指针开章就讲的吧
liu3xing3long 2008-11-07
  • 打赏
  • 举报
回复
首先要清楚指针和指针指向变量的区别
比如char*p=new char[23]
p是指针是位于栈上的,在出了作用域之后会自动释放,
至于后面的数组是位于堆上的,只能手动释放,所以会有delete p;
p只是一个符号,它指向的是char[23]而非p本身是字符数组;
SylarXillee 2008-11-07
  • 打赏
  • 举报
回复
指针的解引用会改变所指向单元的内容
jinsehongfengtiger 2008-11-07
  • 打赏
  • 举报
回复
p = &m;
此时p指向m的内存地址,也就是说*p和m是一个值
所以改变*p的值就等于改变了m的值
BuleRiver 2008-11-07
  • 打赏
  • 举报
回复
p = &m; // p指向m存储的内存单元,
*p = 20; // 修改m的值
MilanSpiRiT 2008-11-01
  • 打赏
  • 举报
回复
int m = 10; //定义整型变量
int *p; //定义一个指向整形变量的指针
p = &m; //该指针指向m变量的地址
*p = 20; //将指针指向的地址上的数据改为20,这个数据就是m
qingerzheng 2008-11-01
  • 打赏
  • 举报
回复
关键就是要正确理解指针的含义,指向了一个内存地址
lunarfan 2008-11-01
  • 打赏
  • 举报
回复
p = &m
这时你可以把*p就当成m
appleshao 2008-11-01
  • 打赏
  • 举报
回复
*p等价与int m
aidingbao1019 2008-10-31
  • 打赏
  • 举报
回复
万恶的指针,强大的指针。。。。基础基础。。。。
snsn1984 2008-10-31
  • 打赏
  • 举报
回复
通过指针指向修改.凡是介绍指针的部分都应该有这样的例子.
train0714 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dfkjsdhfks 的回复:]
像这种问题书上已经讲得够清楚了,实在不行还可以上网搜一下指针方面的电子书吗,能自已搞定岂不更好.顺便还能更全面的了解指针,而不单单是一个问题.
当然对于这个问题楼上几位已经说得很清楚了.
[/Quote]
up
nuaamzc 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zmlovelx 的回复:]
p = &m;
*p = 20;
p指向了m的内存单元 并修改值为20
[/Quote]
刚刚发错了
up
nuaamzc 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 mapping_ping 的帖子:]
m的值是怎样变成20的?有点乱,没有想明白,请帮忙分析分析。
int m = 10;
int *p;
p = &m;
*p = 20;
printf("m = %d\n",m);
[/Quote]

up
dfkjsdhfks 2008-10-31
  • 打赏
  • 举报
回复
像这种问题书上已经讲得够清楚了,实在不行还可以上网搜一下指针方面的电子书吗,能自已搞定岂不更好.顺便还能更全面的了解指针,而不单单是一个问题.
当然对于这个问题楼上几位已经说得很清楚了.
加载更多回复(13)

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧