读书人

从增运算符笔试题

发布时间: 2013-04-26 16:27:53 作者: rapoo

自增运算符笔试题
int i=3;k=(++i)+(++i)+(i++);求k,i的值
int i=3;k=(++i)+(++i)+(++i);求k,i的值
int i=3;k=(i++)+(i++)+(i++);求k,i的值

百度出来的答案
int i=3;k=(++i)+(++i)+(i++);
k=15,i=6;
int i=3;k=(++i)+(++i)+(++i);
k=18,i=6
int i=3;k=(i++)+(i++)+(i++);
k=9,i=6
理解为一条语句中执行完所有的++i ,再进行语句的计算。但VC6中运行出来的确实这个答案
从增运算符笔试题

附上测试代码
int i=3;
int k ;
k = (++i)+(++i)+(i++);
printf("k = %d , i = %d \n",k,i);

i=3;
k=(++i)+(++i)+(++i);
printf(" k = %d , i = %d \n",k,i);

i=3;
k=(i++)+(i++)+(i++);
printf(" k = %d , i = %d \n",k,i); 笔试
[解决办法]

引用:
引用:int i=3;k=(++i)+(++i)+(++i);

++i;
++i;
t=i+i;
++i;
k=t+i;错

後是18
int i=3, k=(++i)+(++i)+(++i);
013913EE mov dword ptr [i],3
013913F5 mov eax,dword ptr [i]
013913F8 add eax,1
013913FB mov dword ptr [i],eax
013913FE mov ecx,dword ptr [i]
01391401 add ecx,1
01391404 mov dword ptr [i],ecx
01391407 mov edx,dword ptr [i]
0139140A add edx,1
0139140D mov dword ptr [i],edx
01391410 mov eax,dword ptr [i]
01391413 add eax,dword ptr [i]
01391416 add eax,dword ptr [i]
01391419 mov dword ptr [k],eax
不是我想的那, 是先行所有的++i先...

读书人网 >C语言

热点推荐