| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 522 人关注过本帖
标题:问个简单的指针问题
只看楼主 加入收藏
一坨热翔
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-12-22
结帖率:0
收藏
 问题点数:0 回复次数:5 
问个简单的指针问题
数组a[6]={1,2,3,4,5,6},int *k, k=a
在这种情况下,*(a++)和*a++表示的意思一样么?
2013-12-23 11:37
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
++优先级高于*,所以他们是一样的。
不过你这样用是错误的,因为a 是数组首地址不允许++操作,你想问的是*(k++)和*k++ 吧

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-12-23 12:05
一坨热翔
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-12-22
收藏
得分:0 
想问的的确是k。。。
那为什么这两个输出结果都是1呢?如果先运算++的话,k指针不是应该先向右移动一位,这样输出结果不应该是2么?
以下是引用yuccn在2013-12-23 12:05:38的发言:

++优先级高于*,所以他们是一样的。
不过你这样用是错误的,因为a 是数组首地址不允许++操作,你想问的是*(k++)和*k++ 吧
2013-12-23 14:41
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
*(k++)和*k++  是等价的

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-12-23 20:33
一坨热翔
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-12-22
收藏
得分:0 
为什么输出的是1而不是2?
以下是引用yuccn在2013-12-23 20:33:19的发言:

*(k++)和*k++  是等价的
2013-12-24 04:43
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
用这段代码来给你说明吧

    int a[6]={1,2,3,4,5,6};
    int *k=a;

    int x = *(k++);

    printf("%d",x,);

反汇编
    int x = *(k++);
00811698  mov         eax,dword ptr [ebp-2Ch]  
0081169B  mov         ecx,dword ptr [eax]  
0081169D  mov         dword ptr [ebp-38h],ecx    // 先把*k的值赋值给x(也就是ptr [ebp-38h])
008116A0  mov         edx,dword ptr [ebp-2Ch]  
008116A3  add         edx,4                      // k++
008116A6  mov         dword ptr [ebp-2Ch],edx  
    printf("%d",x);
008116A9  mov         esi,esp  
008116AB  mov         eax,dword ptr [ebp-38h]   输出x(ptr [ebp-38h])
008116AE  push        eax  

可以看到 ,int x = *(k++); 被编译器处理成了 x = *k;k++;

这个是vs2010反汇编的结果,

优先级++高于*,并不是说  *(k++)就先执行++ 后执行*。
而是说++ 这个运算符 归属k ,还是归属(*k)

如果++归属k,那么就是k指针指向下一个k的地址 ,也就是k=k+1,等价于k = &a【1】
如果++归属(*k),那么就是k的指向内容递增1 ,也就是 *(k) = *(k)+1 ,等价于a【0】 = a【0】+1;

[ 本帖最后由 yuccn 于 2013-12-24 09:23 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-12-24 08:42
快速回复:问个简单的指针问题
数据加载中...
 
   



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

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