| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 529 人关注过本帖
标题:一个指针的问题,帮忙解答一下
只看楼主 加入收藏
luguolian
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-4-15
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
一个指针的问题,帮忙解答一下
int i=10, j=20, k=30, a, b, c, *p;
   p=&i;   a=(*p)++; b=*(p++); c=*p;
  printf("%5d,%5d,%5d,%5d\n",i,a,b,c);
结果为什么是   11  10  11  1245120  

2013-08-17 18:32
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:8 

这个你的了解堆栈内存结构才行

p=&i;  
 a=(*p)++; 这个等价于  a=(*p);(*p)++; ,也就是a = 10;(*p) = 11了,也就是i = 11;
b=*(p++);等价于  b = *p; p++;  也就是b = 11;p指向上一个内存单元。这个内存单元不是你分配的,所以里面的数据为未知了。
所以c=*p; c的值是一个不确定的。

也就是i = 11,a=10,b=11,c=不确定

我这边反汇编是
    int i=10, j=20, k=30, a, b, c, *p;
00413D8E  mov         dword ptr [i],0Ah
00413D95  mov         dword ptr [j],14h
00413D9C  mov         dword ptr [k],1Eh
    p=&i;  
00413DA3  lea         eax,[i]
00413DA6  mov         dword ptr [p],eax
    a=(*p)++;
00413DA9  mov         eax,dword ptr [p]
00413DAC  mov         ecx,dword ptr [eax]
00413DAE  mov         dword ptr [a],ecx
00413DB1  mov         edx,dword ptr [p]
00413DB4  mov         eax,dword ptr [edx]
00413DB6  add         eax,1
00413DB9  mov         ecx,dword ptr [p]
00413DBC  mov         dword ptr [ecx],eax
    b=*(p++);
00413DBE  mov         eax,dword ptr [p]
00413DC1  mov         ecx,dword ptr [eax]
00413DC3  mov         dword ptr [b],ecx
00413DC6  mov         edx,dword ptr [p]
00413DC9  add         edx,4
00413DCC  mov         dword ptr [p],edx
    c=*p;
00413DCF  mov         eax,dword ptr [p]
00413DD2  mov         ecx,dword ptr [eax]
00413DD4  mov         dword ptr [c],ecx

查看各值
图片附件: 游客没有浏览图片的权限,请 登录注册

 

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-08-17 21:49
liu122430950
Rank: 4
等 级:业余侠客
威 望:1
帖 子:45
专家分:211
注 册:2010-5-30
收藏
得分:2 
p是指向i的指针,
*p  是对p的解引用即p的值是10 ,是因为i++是先赋值再对i加1,所以i=11,a=10,p仍指向i;
同理b的值是*p,即b=11,之后指针p加1,而非指针指向的对象加1,即指针移动了不指向i了,所以b=11,p不指向i了
而c的值是对p的解引用,所以值是个不确定数。

2013-08-17 21:50
luguolian
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-4-15
收藏
得分:0 
回复 2楼 yuccn
你的解答好详细,谢谢你。以后我会常去你的博客看看的
2013-08-21 09:29
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 4楼 luguolian

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-08-21 12:16
快速回复:一个指针的问题,帮忙解答一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038799 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved