读书人

怎么解释:int i; char s[]=quot;abcdequot; p

发布时间: 2012-02-20 21:18:23 作者: rapoo

如何解释: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

读书人网 >C语言

热点推荐