华能水电股票:c程序基础问题。关于++运算符和指针的。请高手解释下。

来源:百度文库 编辑:神马品牌网 时间:2024/05/09 01:35:54
#include <stdio.h>
main()
{
int a[5]={1,3,5,7,9},*p;
p=a;
printf("%d,%d,%d",*p,*(p++),*(++p));
}

为什么答案是 5 ,3 ,3?谁能解释下?

跟下面这个道理一样

main()
{int x=10,y=x++;
printf("%d,%d",(x++,y),y++);
}
输出结果是:—————。
答案是:11,10 语句 y=x++;等价于这二个语句:y=x;x++;所以现在y的值是和x一样,10;再就没有x的事了,就不管它了.printf函数虽然输出的时候顺序是从左到右,可是计算里面的参数是从右到左的,这是大部份人都没有注意的.所以先算表达式y++的值也是y的值10,运算完y自动加1,就是11了;算完后(x++,y)是个逗号表达式,就是y的值,现在y是11.输出的时候就是11,10

先计算最右边*(++p)即先p=p+1,再求*p得到3,
再计算*(p++)即先计算*p即3,再p=p+1,现在p指向了5
最后计算第一项*p即得到了5
所以输出结果是从左到右即5,3,3