以前初学C语言的时候,对于i++和++i的本质不理解,只能通过语句的外形对语句的功能进行实现。
例如:
(++i):加号在前,先加后用
(i++):加号在后,先用后加
以下“以前的理解”网址下的文章是以前写的,现在看看。。。。唉,都是这么过来的啊。
下面就从汇编角度讲讲目前对这句话的理解。
首先我们先来看看这两句语句在Debug下的汇编代码:
以下代码按顺序实现了两个功能:
1、x = i;
2、i = i + 1;
x = i++;
mov eax,dword ptr [i] //将i放入eax
mov dword ptr [x],eax //将eax放入x
mov ecx,dword ptr [i] //将i放入ecx
add ecx,1 //ecx加1
mov dword ptr [i],ecx //ecx放入i
以下代码按顺序实现了两个功能:
1、j = j +1;
2、y = j;
y = ++j;
mov eax,dword ptr [j] //将j放入eax
add eax,1 //eax加1
mov dword ptr [j],eax //eax放入j
mov ecx,dword ptr [j] //j放入ecx
mov dword ptr [y],ecx //ecx放入y
有了上述基础,我们很容易看到++i和i++的区别。
现在的学习过程中,对每一句代码的计算机原理理解,一方面对自己的代码的理解更加深入,另一方面能够促进自己优化代码,写出高效的程序。