菜鸟问题恳请C语言高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/25 00:13:19
问题①:以下这个程序为什么分别用VC++6.0和Turbo C 2.0会得到不同的结果呢(也就是第二个printf那一行),难道两者对于自增自减有不同的处理方式?
问题②:最后那个getchar()函数是用来干什么的?(去掉它不也可以照样正确运行的吗)
补充一下:这个程序是从一本c语言书的随书光盘中复制过来的,这本书是用Turbo C 2.0对所有例子进行编译的.
先谢谢了!!!
**************************************************************
#include <stdio.h>
main()
{
int a=5,b,c,i=10;
b=a++;
c=++b;

printf("a = %d, b = %d, c = %d\n",a,b,c);
printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++);
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
getchar();
}
***************************************************
vc++6.0 显示第二行的结果为i,i++,i++=10,10,10
turbo C2.0显示第二行的结果为i,i++,i++=12,11,10
那本书上提到"自增自减具有右结合性",请问什么是"右结合性",本例怎么体现出来?
我的困惑是为什么不这样:原来

1.这里体现的“函数的参数计算顺序”。
i,i++,i++是作为printf()函数的参数传递的,不难看出,在TC2.0中,函数的参数计算顺序是从右向左计算的。而在VC6.0中,函数的参数计算顺序是从左向右计算的。至于为什么这样,是因为“函数的参数计算顺序”没有规定,由编译器决定。2.getchar()是等待你按任意一键退出,当初在DOS环境下运行TC2.0时为了能让你看见输出结果,而给的一个等待机会。

b=++a是先把a自加后在赋值与b
c=b++是先把b的值给c后b本身再自加

getchar()
是单个字符输出,大家用来做暂停,然后任意键推出,如果没有那个,有的程序会运行完自动关闭,很麻烦

至于平台问题,可能跟内核有关,没学过C+

在T 2.0里
printf("i,i++,i++",i,i++,i++);
是按从右向左运算的.
i=10;
i++ 就是11 先使用(打印10)后计算.打印10后自动加1;
i++ 就是12
i 就是12拉.

问题不是++,--了,而是函数调用了。
在c语言标准中没有对函数调用是参数的计算顺序做规定了(一般书上说的从右到左计算后压入堆栈是错误的,计算机在处理的时候为了追求速度首先使用的是寄存器了,不够才使用堆栈了),因此不同的编译器会对它做不同的反应。建议在c语言编程中不要用这种方法,这不是良好的编程风格了。

TC和VC++在运行程序时会有一定的差异,这是正常嘚