鉴于代码:
int arr[] = {11,22,33,44,55}
for(int i = 0; i <5 ; i++)
cout << *(arr+i) << " ";
*(arr+i)
与arr[i]
具有相同的效果吗?
答案 0 :(得分:11)
是。实际上,下标运算符E1[E2]
被定义为等同于*((E1)+(E2))
:
后缀表达式后跟方括号中的表达式是后缀表达式。其中一个表达式应具有“指向
T
”的类型,另一个表达式应具有未映射的枚举或整数类型。结果是类型为“T
的左值”。类型“T
”应是完全定义的对象类型。 表达式E1[E2]
与*((E1)+(E2))
完全相同(根据定义)。
答案 1 :(得分:1)
是肯定的。数组衰减到pointers
。数组名称指向数组的第一个元素。所以
*(arr +i)
相当于:
arr[i]