对于C语言中的"++"和“--”运算符,确实是C语言的一大特色,但也是很容易让新手迷惑的地方。
新手在学习C语言的过程中对它感到困难,大家要理解,想当初,我们自己在学习这里的时候,不也是很费神的吗?
我提供一些理解,供楼主参考,希望楼主尽快突破它。
以下面的句子为例:
printf("%d,%d",i++,j--);
printf("%d,%d",++i,--j);
这里的"i++"、"j--"、"++i"、"--j"都是要被取值的表达式,相当于赋值表达式中的右边的部分,
这种情况下,对于表达式"i++" ,系统内部实际上有两个动作:读取变量i的值,做相应的用途,然后再把变量i的值自加1
对于表达式"j--",处理情况类拟,只是后面的动作是变量j的值自减1。
但对于"++i",系统内部也是执行两个动作,但执行的先后顺序跟"i++"刚好相反:先把变量i的值自加1,然后再读取变量i的值,做相应的用途。对于"--j",情况与"++i"类似,只是变量j的值先自减1。
再看下面的例子:
for(i=0;i<10;i++)printf("%d\t",i);
for(i=0;i<10;++i)printf("%d\t",i);
对于这两个例子,它们的效果是一样的,没有差别。为什么呢?
在这两个例子中,"i++"、"++i"都是作为一个独立的语句,并没有其它用途需要从它们那儿取值,所以这两个语句就少了一个被取值的动作,只剩下变量自加1了,当然就没区别了。
也许大家会看到,在这两个语句中,都是"i<10"表达式,要取变量i的值呀,没错,但这已经是另外一条语句了。
大家再看下面的例子:
for(i=0;i++<10;)printf("%d\t",i);
for(i=0;++i<10;)printf("%d\t",i);
这两个语句,就有差别了,原因跟前面第一个例子一样。
新手在学习C语言的过程中对它感到困难,大家要理解,想当初,我们自己在学习这里的时候,不也是很费神的吗?
我提供一些理解,供楼主参考,希望楼主尽快突破它。
以下面的句子为例:
printf("%d,%d",i++,j--);
printf("%d,%d",++i,--j);
这里的"i++"、"j--"、"++i"、"--j"都是要被取值的表达式,相当于赋值表达式中的右边的部分,
这种情况下,对于表达式"i++" ,系统内部实际上有两个动作:读取变量i的值,做相应的用途,然后再把变量i的值自加1
对于表达式"j--",处理情况类拟,只是后面的动作是变量j的值自减1。
但对于"++i",系统内部也是执行两个动作,但执行的先后顺序跟"i++"刚好相反:先把变量i的值自加1,然后再读取变量i的值,做相应的用途。对于"--j",情况与"++i"类似,只是变量j的值先自减1。
再看下面的例子:
for(i=0;i<10;i++)printf("%d\t",i);
for(i=0;i<10;++i)printf("%d\t",i);
对于这两个例子,它们的效果是一样的,没有差别。为什么呢?
在这两个例子中,"i++"、"++i"都是作为一个独立的语句,并没有其它用途需要从它们那儿取值,所以这两个语句就少了一个被取值的动作,只剩下变量自加1了,当然就没区别了。
也许大家会看到,在这两个语句中,都是"i<10"表达式,要取变量i的值呀,没错,但这已经是另外一条语句了。
大家再看下面的例子:
for(i=0;i++<10;)printf("%d\t",i);
for(i=0;++i<10;)printf("%d\t",i);
这两个语句,就有差别了,原因跟前面第一个例子一样。
做自己喜欢的事!