今天一位童靴给我了如下的代码:
#include<stdio.h>
main()
{
int b=3;
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=128;
printf("%d,%d\n",*ptr,*(ptr++));
}
问我输出的结果是什么以及原因。我告诉他是8,7.他觉得很吃惊,因为他在vc++下编译的,执行的结果是 7,7,我试了一下,在
vc下果然是7,7,我猜想大概是程序printf函数中的参数执行的顺序的问题,在gcc中是从右往左,vc++里面出现这样的结果,其顺序应该是从左往右。原以为事情到此应很清楚了,就是执行的顺序问题。
可是麻烦问题又来了。假设在vc++里面的顺序是从左至右,那么下面代码的结果应该是7,8
#include<stdio.h>
main()
{
int b=3;
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=128;
printf("%d,%d\n",*ptr,*(++ptr));
}
可是,在vc下执行的结果是 8,8.这点就让人比较费解了啊,按照从左至右的顺序,结果应该是7,8。
那么这可能是编译器的不同所导致的问题。只是个人觉得vc++处理得似乎不够一致。
也没有多大的
意义,只是备忘,免得以后自己也陷进去了。
也可能是微软超越了执行顺序的问题,只是我还不
理解它所采用方法的机制罢了