首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个困惑小弟我的有关问题

2012-03-02 
一个困惑我的问题intarr[]{6,7,8,9,10}int*ptrarrprintf( %d,%d ,*ptr,*(++ptr))打印的是7,7,如果

一个困惑我的问题
int   arr[]={6,7,8,9,10};
int   *ptr=arr;
printf( "%d,%d ",*ptr,*(++ptr));
打印的是7,7,如果这个理解为先进行++ptr运算再进行打印函数还行的通的话,
那么
int   arr[]={6,7,8,9,10};
int   *ptr=arr;
printf( "%d,%d ",*(++ptr),*(++ptr));

打印的结果是8,7

还有
int   arr[]={6,7,8,9,10};
int   *ptr=arr;
printf( "%d,%d ",*(--ptr),*(++ptr));
打印的是6,7

该怎么解释呢?难道变成从右边开始计算吗?



[解决办法]
哎,不要讨论这个东西了。
根据C/C++标准的规定,在同一行里,一个变量如果被修改了,就不可以再被求值或者再修改,否则就是未定义行为。
写出如此的代码就是自找麻烦。
[解决办法]
根据C/C++标准的规定,在同一行里,一个变量如果被修改了,就不可以再被求值或者再修改,否则就是未定义行为。

-----

有这个说法,如果真有,那么确实就避免了很多争议问题。
[解决办法]
不同的编译器产生的结果也是不同
一般情况下
传递过的参数入栈情况是从右往左
所以他先计算最右边的 然后计算左边的参数
就是这种结果
但这种代码移植性比较差
在多平台下最好不要写这样子的代码

热点排行