首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么解释:int i; char s[]="abcde" putchar(i[s])

2012-02-20 
如何解释:int i char s[]abcde putchar(i[s])如题[解决办法]int ichar s[]abcdeputchar(i[s])--

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

热点排行