c语言自加运算符

发布时间:2024-05-19 21:05 发布:上海旅游网

问题描述:

程序
main()
{
int a=5;
a++;
printf("%d",a);}
的运算结果为什么是6而不是5,自加符号放在后面是先运算后加一吗,如果是的话结果应该是5 啊
我要详细的!! 要针对这个题 下面的例子我都看过

问题解答:

a++其实相当与a=a+1
++a也是相当与a=a+1
其两者最大的区别是:
a++是先执行语句再自加运算
++a是先自加再执行该语句,比如:
int a=0,b=0;
b=++a;
printf("%d",b);//这时b=1,因为a先自加1再赋值给b,即a=1
==============================
int a=0,b=0;
b=a++;
printf("%d",b);//这时b=0,因为a先赋值给b,然后a再自加1,即a=1
------------------------------------------------------------
很明显楼主还没明白我的意思,我的“执行该语句”是执行a++或++a所在的语句,而不是整个程序本身,你的例子a++不就只是一条语句而已嘛,a++这条语句执行完后,a就自加1,然后再执行a++下面的语句,所以a++下面的printf("%d",a);语句里面的a值已经是自加后的了,所以就是6

呵呵,这个问题,钻牛角尖里了

a++; 没错,先运算 后自加;先取得a的值5,取完之后干什么呢?返回?其他运算?也没有要求它返回阿?也没有其他运算阿?所以 “先运算” 到此就完毕了,接着干什么?当然是 “自加”,a 就成了6了,输出6 难道有什么问题吗?
你还想等printf后再 “自加”? 那要没有printf直接返回了,岂不永远也自加不了了?

先运算 后自加 或者其他,都是说 “在表达式内部的先后次序”,离开这个表达式,运算已经完成了,a++后面的分号,表明表达式已经结束了

如果还不能理解,那就改行吧

详细?难道要我给你上反汇编吗?不用了吧,新手看不懂哈。

不过无论是a++还是++a,其最终的结果都是会给a加上一个1.

它们的区别在于和其它表达式混用的时候,
比如说int b = a++;如果a原来是5的话,那么系统先把5传给b,然后再给a加1.
int b = ++a;那么就先对a加1,然后再把结果6给b.

简单的来说,在内部实现上a++利用++a.你可以这样看,假设下面是一个a++的实现的FUNCtion:

int function( int* a )
{
int b = *a;
*a += 1;
return b;
}

在C++中我们可以重载++,那就更清楚了,鉴于你没有学过C++的情况下,我就不拿出来了,怕你搞混淆了。

如果printf("%d",a++);那么结果就是五,a++单独成一个语句时,效果等同于:a=a+1;和++a; 你也是初学者?用电脑加我为好友,以后互相交流…我为了弄懂这个也问倒几个高手,不是难倒,是烦倒…因为我要问个一清二楚!Q960575562

你的这个测试方法不是很好,不能让你准确的理解++的含义
建议你这样试试
main()
{
int a=5;
printf("%d",a++);
}

main()
{
int a=5;
printf("%d",++a);
}

这样就能很明白的看到区别

a++是先打印,然后再加一
++a相反
所以输出完全不同
但是printf以后,a的值都会变成6

热点新闻