| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 397 人关注过本帖, 1 人收藏
标题:指针与数组的一个小问题
只看楼主 加入收藏
jovon
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2012-1-25
结帖率:50%
收藏(1)
已结贴  问题点数:20 回复次数:6 
指针与数组的一个小问题
#include<stdio.h>
void main()
{
    int arr[5]={6,7,8,9,10};
    int *p=arr;
    (*p++)+=123;
    printf("%d %d\n",*p,*(++p));
}
输出结果为8 8,谁来解释解释。
2012-03-24 16:21
google天下
Rank: 2
等 级:论坛游民
帖 子:18
专家分:38
注 册:2012-3-14
收藏
得分:4 
先说第二个 输出的8 ,他是a【2】;
再说第一个,由于*(++p)使p指向a【2】所以,也为8,唯一能解释的原因是在函数printf的*(++p)运算产生了副作用。
2012-03-24 16:34
Wikyo_hoho
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:188
注 册:2012-3-12
收藏
得分:4 
(*p++)+=123;同等于*p+=123;p++;
*(++p)表示表达式值为*p,表达式运算完成后p++;
楼上已经解释,只是补充一下,printf()的参数是从右往左读,所以先是*(++p),再*p
2012-03-24 20:54
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:4 
这与运算符优先性有关,在参数传递之前,首先执行++p
然后再传参数
2012-03-24 22:01
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:4 
本来我也想解释的 可大家都解释完了
2012-03-24 22:03
liuxingar
Rank: 2
等 级:论坛游民
帖 子:22
专家分:43
注 册:2011-4-1
收藏
得分:4 
回复 3楼 Wikyo_hoho
能不能解释一下为什么:(*p++)+=123;同等于*p+=123;p++;  没看懂,麻烦了
2012-03-24 22:17
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:0 
后缀++的优先级低于+=
因此先计算+= 在计算++
因此一个表达式就可以扯开,这样更容易理解
2012-03-24 22:21
快速回复:指针与数组的一个小问题
数据加载中...
 
   



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

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