给定代码:
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]