>第 16 章 运算符详解>其它运算符>复合赋值运算符

James kingkenmark@163.com
2009-07-19 13:55:55

"对表达式a只求值一次",正确的说应该是对a访问一次


宋劲杉 songjinshan@akaedu.org
2009-07-19 16:49:17

我觉得我说得没错,且更准确


zhujj zhuworktemp@163.com
2010-10-07 21:48:36

#include<stdio.h>
int foo()
{
	printf("in\n");
	return 1;
}
int main(int argc,char **argv)
{
	//~ int a[5];
	//~ a[foo()]+=1;
	//~ a[foo()]=a[foo()]+1;
	int a=0;
	a+=1;
	a=a+1;
	return 0;
}
/*
 * 	a[foo()]=a[foo()]+1;
0x8048437 call   0x8048414 <foo>
0x804843c mov    %eax,%ebx
0x804843e call   0x8048414 <foo>
0x8048443 mov    0xc(%esp,%eax,4),%eax
0x8048447 add    $0x1,%eax
0x804844a mov    %eax,0xc(%esp,%ebx,4)*/

/*
 * a[foo()]+=1;
0x8048436 call   0x8048414 <foo>
0x804843b mov    %eax,%edx
0x804843d mov    0xc(%esp,%eax,4),%eax
0x8048441 add    $0x1,%eax
0x8048444 mov    %eax,0xc(%esp,%edx,4)*/

/*
 * 	a+=1;
0x804843a addl   $0x1,-0x4(%ebp)
	a=a+1;
0x804843e addl   $0x1,-0x4(%ebp)*/

看起来还是有区别,不可以一概而论。
是本好书,继续看。


如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!