C语言输出问题 关于++i和i++

作者&投稿:集邦 (若有异议请与网页底部的电邮联系)
C语言问题,关于printf函数打印结果与++i和i++的问题,详细问题如下。~

结果正确
第一个10是因为++是在在指令结束后才真正实现的
第二个14是因为该指令中是从右向左执行的,执行最右边的++后i已经为12了,所以右边两个位12,继续向左执行的话就为13、14
最后为15是因为在第二个指令结束后才执行的i++指令使i值为15的

i++和i--的区别:
1、运算方式
i++属于自增运算,相当于i=i+1;
i--属于自减运算,相当于i=i-1;
2、值的变化:
假设i=10,分别运行i++、i--后;
i++后:i=i+1=10+1=11;
i--后:i=i-1=9。

扩展资料:
无论i++,还是i--,这两个公式既可以单独存在,也可以赋值给另外的变量。当赋值引用的时候,他们的含义:
1、i++,先引用i的值,后增加i的值,
如int i=10;
int a=i++;
该程序运行后,a=10,而i=11。
2、i--,先引用i的值,后i的值减1。
如int i=10;
int a=i--;
该程序运行之后,a=10,i=9。
除了以上的用法外,还有一种表示法是++i或者--i,这种表示法i的值也会相应的自增1或者自减1,i的结果和i++与i--是相同的,但是当赋值给另一个变量时,对赋值的变量,结果却存在差别,因为++i代表先增加,后引用,--i代表先减少,再引用。
例如同样的程序,i=10,
如果int a=i++,那么a=10;而int b=++i的话,b=11;
如果int a=i--,那么a=10;而int b=--i的话,b=9。

print是从右到左开始运算的,也就是按这个顺序来做i++,++i,i*=2。i++是后置自增运算,也就是先使用然后自己加一,所以i++这里的值为2,这个运算做完之后,因为自增所以i=3,而++i是前置自增运算,是使用之前加一,所以++i的值就为4,然后进行i*=2,所以i就等于8,最后结果应该是8 4 2

printf("%d %d %d \n",i*=2,++i,i++);
是从右边开始执行的
输出结果是8 4 2 吧
所以i++表达式的值为2
++i表达式为 4 (i先前已自增1,这里又自增了1,且++在前面)
i*=2为8

这种东西只要记住printf里的语句是从右往左执行
然后i++和++i都会是i自增1,不同的是i++是表达式i++的值为i(自增前);而
++i则是i+1,这里的i也是自增前的
这种语句虽然我们避免写,可是有的是为了考试,出题考你这点,所以这点虽不要写但是应该要知道的

这个与编译器相关,
参数出栈的顺序 从右到左
自增运算i++该语句执行完毕再进行
自增运算++i立即执行

你的编译环境应该是VC
6,3,2

首先执行i++,一些编译器中,i++在printf中是执行完这条语句之后才自增1,就类似for(i=0;i<n;i++)一样,是整个for执行一次后才i自增

然后执行++i,这个是立即执行所以自加后再输出

第三个不用说了~

这个代码编一下就知道怎么回事了

int main(int argc, char* argv[])
{
int b=1;
printf("\n%4d%4d%4d%4d\n",b,b++,++b,b);
printf("\n%4d\n",b);
b=1;
printf("\n%4d%4d%4d%4d\n",b++,b++,b++,b++);
printf("\n%4d\n",b);
b=1;
printf("\n%4d%4d%4d%4d\n",++b,++b,++b,++b);
printf("\n%4d\n",b);
return 0;
}

printf是从右到左依次输出,故先执行i++,然后执行++i,最后执行i*=2.
i++是先以i的值进行运算,然后i的值在加1,++i反之。
需要注意的是:当printf整个执行完了之后i++,的++才会执行。
你可以在prinf之后查看i的值,应当是7.

printf是反过来算的,先算i++,再算++i,最后i*=2。


洛南县18019577821: C语言问题~~关于i++与++i的区别 -
谷须对氨: 第一个++i是一个单独的语句,所以说i++和++i是一个效果,注意s1[i]!='\0'这个表达式并不涉及自加,因为这是独立的表达式.这个循环执行完了i就是s1数组的最末尾的结束符\0的下标. 第二个i++和j++是这样的,都是先使用在+1,可以把最里面...

洛南县18019577821: c语言i++和++i的问题 -
谷须对氨: 朋友,这个地方的i++和++i结果是一样的.但有的地方就不一样,比如说: #include<stdio.h>main() {int a,b=0; a=++b;printf("%d\n",a); b=0;a=b++;printf("%d\n", a); }看出区别没?第一个a等于1,而第二个a却等于0.为什么?因为i...

洛南县18019577821: c语言里,i++与++i的区别,最好举例说明 -
谷须对氨: i++ 和 ++i的基本功能是相同的,都是对变量i进行自增1运算,从功能上讲相当于i =i+1 ; ++运算符分为前缀++和后缀++,如i++中的++就是后缀运算符,++i中的就是前缀运算符,两个的区别在于: 前缀++,先使用变量,再进行变量自增1 后缀++,先进行变量自增1,再使用变量1 2 3 4 5 6 7现在分析你的代码: i=1; k=++i; //先加,后用,i=i+1=2 k=i=2 z=i++; //先用,后加,z=i=2, i=i+1=3 输出 2 2

洛南县18019577821: 请问一下c语言中++i跟i++,以及——i跟i -- 的区别啊 -
谷须对氨: 关于自增自减运算,很多书籍没有把问题讲清楚,在C语言里是这样的:1.后置运算:k++表示先运算,后自加.意思是遇到k++了,我先把当前的k的值拿来参加运算,后面再去管它的自加.那么,【“后面”后到什么程度呢?要后到当前的语...

洛南县18019577821: C语言编程中的++i和i++有什么区别?该怎么记牢?谢了 -
谷须对氨: ++i在用时是i先自增1,再用这时的i值去参与计算; i++是用增1前的i去参与计算,参与计算后i再增1; 例子:int i=0; i++; printf("%d",i);//这时打出的值为0; printf("%d",i);//这时打出的值为1,因为i在上个语句中被用过了,本身的值增1 ********** int i=0; ++i; printf("%d",i);//这时打出的值为1;

洛南县18019577821: 解释一下C语言中i++和++i的区别,能有例子最好 -
谷须对氨: i++和++i都是c语言里的自增,但是它们自增的顺序不同.++i表示,i自增1后再参与其它运算,而i++ 则是i参与运算后,i的值再自增1.在这里有一个链接回答的挺有帮助,有你可能需要的例子https://zhidao.baidu.com/question/540417228.html

洛南县18019577821: C语言i++和++i的问题
谷须对氨: 这里要说明的是:++i和i++的不同, 1:++i是参与其它运算前先自加, 2:i++正好相反,是先参与其它运算再自加. 3:看你的例子:y=(++i)+(++i)+(i++) ;i=1 这里有两个++i,一个i++;也就是说i首先要先自加两次,即i= i+1;执行两次, 也就是说...

洛南县18019577821: C语言自增自减,i++和++i的区别 -
谷须对氨: 自增、自减运算符. 自增:i++,++i 自减:i--,--i i++和++i的区别:当i++和++i单独一行时,两者的作用相同,都实现i=i+1;但不同之处在于i++先使用i的之后,再执行i=i+1,而++i是先执行i=i+1,在执行使用i的值. 而 a = ++i,相当于 i=i+1; a = i...

洛南县18019577821: 计算机C语言中i++和++i有什么区别?最好能讲的浅显易懂点,谢谢! -
谷须对氨: 总的来说:i++与++i最重要的区别在于:i++先使用后自增如:int i=0,s=0;s=s+i++;printf("s=%d,i=%d",s,i);这时s的值为0(因为先使用i的值来进行相加,而i和s的初值都为0所以相加的结果还是为0,而i的值会变为1);而++i则不同,++i是先自增后使用如:int i=0,s=0;s=s+(++i);/*为了使你更好的理解我给++i加了个括号,不加也是可以的*/printf("s=%d,i=%d",s,i);输出的结果都为1;在进行计算时i自己先加1后再与s相加;所以两个值都为1;

洛南县18019577821: c语言问题,i++与++i的区别 -
谷须对氨: 在C语言我们会经常把i++与++i弄混淆.i++ 是先使用,再自加(其自加是在遇到结束标志时才会进行) a=i++;即a = i;i=i+1;++i 是先自加,再使用 a=++i;即 i=i+1; a= i;

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网