给定代码:
int arr[] = {11,22,33,44,55}
for(int i = 0; i <5 ; i++)
cout << *(arr+i) << " ";
有没有*(arr+i)
一样的效果arr[i]
?
是的。实际上,下标运算符E1[E2]
被定义为等价于*((E1)+(E2))
:
后缀表达式后跟方括号中的表达式是后缀表达式。其中一个表达式应具有“指针
T
”类型,而另一个应具有无作用域枚举或整数类型。结果是“<code>T”类型的左值。类型“<code>T”应该是一个完全定义的对象类型。该表达式E1[E2]
与 (根据定义)相同*((E1)+(E2))
。
是的。数组衰减到pointers
. 数组名指向数组的第一个元素。所以
*(arr +i)
相当于:
arr[i]