C语言,这组语句求解释(很简单的语句,但是想不通)#includemain(){int i=8;printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);}输出结果是:8 7 8 8 -8 -8 ,请高手能说明下为什么是这个结果?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 17:34:38
C语言,这组语句求解释(很简单的语句,但是想不通)#includemain(){int i=8;printf(

C语言,这组语句求解释(很简单的语句,但是想不通)#includemain(){int i=8;printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);}输出结果是:8 7 8 8 -8 -8 ,请高手能说明下为什么是这个结果?
C语言,这组语句求解释(很简单的语句,但是想不通)
#include
main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
}
输出结果是:8 7 8 8 -8 -8 ,请高手能说明下为什么是这个结果?

C语言,这组语句求解释(很简单的语句,但是想不通)#includemain(){int i=8;printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);}输出结果是:8 7 8 8 -8 -8 ,请高手能说明下为什么是这个结果?
楼主不妨耐心看看
首先给楼主说一句,像这样的题没有必要钻的太深,主要是编译器不同,运算结果不同,如果一个代码里出现你这样的语句,那么它的移植性就非常糟糕,简单的说就是垃圾代码!
那为什么书本要出这样的题呢?他的目的主要是让学生了解printf函数处理参数的原理,所以楼主千万不要走错方向,拿题做题而不懂原理.
ok,现在谈谈二楼的回答,他虽然回答出了原因,但很遗憾是错的,稍微有点递归思想的话,就知道“...先入栈,最先被运算...”这是错的!三楼虽然回答了运算方向,但没有回答原因.所以,本人在此做一下全面的补充.
要回答这个问题,楼主首先要知道什么是栈区,栈所起的作用,以及栈的特点
通常所说的栈区指的是系统内的一块内存区(即栈内存)
先举个例子
比如现在有5个玻璃球分别编号为1,2,3,4,5和一个试管,我们按照编号顺序依次将小球放进试管,然后再一次将小球去出试管,这时你会发现我们放进去的顺序是1,2,3,4,5,而取出的顺序是5,4,3,2,1,顺序相反
5个小球相当于代表5个参数,而试管相当于栈内存用来存放这些参数,所以,出栈的过程是逆序的,这就是栈的特点”先进后出“,递归实现也就是这个原理,只不过参数变成了函数而已.
所以,栈区的作用是用来存放数据的,而不是处理数据,这也就是二楼说错的原因,那他到底什么时候处理数据的呢?是在数据出栈后,再交给CPU进行处理.
好了,现在来说说你的题,
你编译器的特点只运算前置,不用计算后置.
首先六个参数自左向右依次入栈,接着依次出栈(这时候才会对数据进行处理)
第一个出栈的是-i--,由于后置,最终值为-8
接着出栈-i++,同理,值为-8
接着i--,值为8
接着i++,值为8
接着--i,由于前置,所以最终结果为7
接着++i,由于前置,所以结果为8
而二楼为什么跟你的运算不一样呢?
原因是他的编译器输出值之后,还会计算后置,而这个计算过后置的i值会成为下一次计算i表达式的初始值,楼主不妨自己试试.

C语言,输出4*4的螺旋矩阵.请在语句上批注解释,本人初学者,语句请尽量简单. C语言,这组语句求解释(很简单的语句,但是想不通)#includemain(){int i=8;printf(%d %d %d %d %d %d ,++i,--i,i++,i--,-i++,-i--);}输出结果是:8 7 8 8 -8 -8 ,请高手能说明下为什么是这个结果? 简单C语言for语句!for语句如何实现? C语言中FOR语句和WHILE语句的意思这两个语句指代什么含义. C语言,帮我解释语句, C语言的常用语句 C语言,语句的含义 C语言while 循环语句求1-100的累加值,但要跳过所有个位数 是3的数. C加加while循环语句怎么写求C加加语言中的while循环语句的格式 For循环语句如何计算?求各位指导下for循环语句如何计算?顺便列出一个简单的For循环语句题目,来作为解释. 求简单的对大城市评价语句? C语言中怎样使用goto语句最好是带有例子的解释 用while语句,不准用break语句,求100以内的素数.用C语言写程序 C语言的空语句会出现什么逻辑错误?举个例子?教材上说,“C语言允许空语句的存在,但随意使用空语句可能会造成逻辑错误”.什么情况下出现逻辑错误?请举个例子. C语言简单语句帮忙给叙述下switch(grade){case A:a=b; break;}该怎样用文字叙述这段语句? 请用简单的语句来解释宿石邑山中 C语言求解释一下一个语句第一个else if C语言,分别用if 语句和switch语句编写程序求分段函数的值分别用if 语句和switch语句编写程序,求下列分段函数的值.