"对表达式a只求值一次",正确的说应该是对a访问一次
我觉得我说得没错,且更准确
#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将会出现在本书前言的致谢中。再次感谢您的宝贵意见!