C语言奇怪的结果,Why?

来源:百度知道 编辑:UC知道 时间:2024/05/30 20:46:20
int main(int argc, char* argv[])
{
int c=9,d=0;
c=c++%5;
d=c;
printf("d=%d\n",d);
scanf("%s");
return 0;
}
结果是:d=5
为什么不是d=4或d=0ne

int c=9,d=0;
c=c++%5; //这里相当于c=c%5,c++;所以c=5了
d=c; //d=c;所以d=5了
printf("d=%d\n",d);

c=c++%5;这句话的操作可以写成:
1、c=c%5;此时c=4
2、c++,这就是为什么c=5的原因了

首先c=c++%5
c=9,因为c++的这个++是后算的,所以就变成c=9%5,c等于4了,然后c再自加一下,所以是5

以上说法除了二楼,均是正确的

c = c++ % 5;
和编译器有关,语句不要依赖于求值顺序了~~
我在bcb和vc下得出的结果是5,在gcc下的结果是4。
你可以参考一下《C程序设计语言》第2版中文版的43页,上面有个例子是:
a[i] = i++; //这也和具体的编译器有关,在不同的编译环境结果可能不同

这种语句在不同的环境中,产生了不同的结果,不适合于移植。而且,这种语句不容易读懂,应该分开写成"c=c%5;c++"