2013-04-25 236 views
0

给予代码:C++指针算术

int arr[] = {11,22,33,44,55} 
for(int i = 0; i <5 ; i++) 
    cout << *(arr+i) << " "; 

是否*(arr+i)有作为arr[i]同样的效果?

+1

是的,它确实如此。 – piokuc 2013-04-25 19:43:04

+0

易于测试,当你用'arr [i]替换它会发生什么' – 2013-04-25 19:43:06

+0

它甚至与'我[arr]'相同。 – 2013-04-25 20:00:51

回答

11

是。实际上,下标操作E1[E2]被定义为等同于*((E1)+(E2))

后缀表达式,随后在方括号中的表达式是一个后缀表达式。其中一个表达式的类型应该是“指向T的指针”,另一个表达式应该是非范型的枚举或整型。结果是类型为“T”的左值。“T”类型应为完全定义的对象类型。 表达式E1[E2]*((E1)+(E2))相同(根据定义)。

+1

这导致了一些奇怪的事情,比如:'我[arr]'。 – m0nhawk 2013-04-25 19:59:03

1

是的。阵列衰减到pointers。数组名称指向数组的第一个元素。所以

*(arr +i) 

等同于:

arr[i]