如何解释:int i; char s[]="abcde"; putchar(i[s])
如题
[解决办法]
int i;
char s[]="abcde";
putchar(i[s])
------
s[i] 和 i[s] 的等价的
[]运算符对于字符串下标访问是这样实现的
s[i] 等价于 *(s + i)
i[s] 等价于 *(i + s)
所以 两者同样可以访问数组元素
s[i] = 'a' 是 *(s + i) = 'a'
i[s] = 'a' 是 *(i + s) = 'a'
效果一样
[解决办法]
i[s] -> s[i]
是等价的 参考c language reference
[解决办法]
同意3楼意见:
至于为什么,《c语言陷阱与缺陷》关于数组与指针的那章里面讲的很清楚,建议搂住去看看!
[解决办法]
《c陷阱与缺陷》36页正解!
[解决办法]
lddLinan
人类的本性喜欢把不合意的事实看作虚妄,然后毫无困难地找些理由来反对它
等 级:
发表于:2007-10-10 15:03:1613楼 得分:0
"
s[i] = 'a ' 是 *(s + i) = 'a '
i[s] = 'a ' 是 *(i + s) = 'a '
"
Are you guys making jokes here? If so, that 's a good one.
-------
是不是开玩笑你自己连试试都不愿意去做吗?
int main()
{
00401400 push ebp
00401401 mov ebp,esp
00401403 sub esp,8
char* s = "abcde";
00401406 mov dword ptr [s],offset ___xi_z+124h (40473Ch)
int i = 2;
0040140D mov dword ptr [i],2
s[i] = 'v';
00401414 mov eax,dword ptr [s]
00401417 add eax,dword ptr [i]
0040141A mov byte ptr [eax],76h
i[s] = 'v';
0040141D mov ecx,dword ptr [s]
00401420 add ecx,dword ptr [i]
00401423 mov byte ptr [ecx],76h
return 0;
00401426 xor eax,eax
}
00401428 mov esp,ebp
0040142A pop ebp
0040142B ret