关于printf函数内数字的自增自减运算#includemain(){ int i=8;\x05printf("%1d\n%2d\n%3d\n%4d\n%5d\n%6d\n",i--,i--,i--,i--,i--,i--);\x05printf("%d\n",i);}我在VC6.0中编译时得到的结果是8888882为什么最后一个是2 .

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 11:48:06
关于printf函数内数字的自增自减运算#includemain(){ int i=8;\x05printf(

关于printf函数内数字的自增自减运算#includemain(){ int i=8;\x05printf("%1d\n%2d\n%3d\n%4d\n%5d\n%6d\n",i--,i--,i--,i--,i--,i--);\x05printf("%d\n",i);}我在VC6.0中编译时得到的结果是8888882为什么最后一个是2 .
关于printf函数内数字的自增自减运算
#include
main()
{ int i=8;
\x05printf("%1d\n%2d\n%3d\n%4d\n%5d\n%6d\n",i--,i--,i--,i--,i--,i--);
\x05printf("%d\n",i);
}
我在VC6.0中编译时得到的结果是
8
8
8
8
8
8
2
为什么最后一个是2 .

关于printf函数内数字的自增自减运算#includemain(){ int i=8;\x05printf("%1d\n%2d\n%3d\n%4d\n%5d\n%6d\n",i--,i--,i--,i--,i--,i--);\x05printf("%d\n",i);}我在VC6.0中编译时得到的结果是8888882为什么最后一个是2 .
这个估计不是书本的例题吧?简单说下,首先要引入一个叫顺序点的概念,符号“;”就是一个顺序点,所有的自增自减操作都会在顺序点后完成.printf("%1d\n%2d\n%3d\n%4d\n%5d\n%6d\n",i--,i--,i--,i--,i--,i--);
printf("%d\n",i);这两个语句,第一个printf后就有一个顺序点了,所以所有的i--全部生效,一共自减六次,所以结果为8-6=2.不过不要有写语句printf("%1d\n%2d\n%3d\n%4d\n%5d\n%6d\n",i--,i--,i--,i--,i--,i--);这样的习惯,我们前面说了,符号'";"是一个顺序点,可是printf中各个i--之间并没有 顺序点,也就是每个i--输出的值都是不确定的(不知道输出之前i被自减了几次),你在VC6输出的都是8,你在gcc或者其他编译器的结果都是未知的.其范围在2-8之间都有可能.所以这是一个很不好的习惯.