C++ Pointer Arithmetics

C++ Pointer Arithmetics,c++,pointers,C++,Pointers,鉴于代码: int arr[] = {11,22,33,44,55} for(int i = 0; i <5 ; i++) cout << *(arr+i) << " "; *arr+i是否具有与arr[i]相同的效果?是。数组被衰减为指针。数组名称指向数组的第一个元素。所以 *(arr +i) 相当于: arr[i] 对。实际上,下标运算符E1[E2]被定义为等效于*E1+E2: 后缀表达式后跟方括号中的表达式是后缀表达式。其中一个表达式应具有

鉴于代码:

int arr[] = {11,22,33,44,55}
for(int i = 0; i <5 ; i++)
    cout << *(arr+i) << " ";
*arr+i是否具有与arr[i]相同的效果?

是。数组被衰减为指针。数组名称指向数组的第一个元素。所以

 *(arr +i) 
相当于:

 arr[i]

对。实际上,下标运算符E1[E2]被定义为等效于*E1+E2:

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


是的,是的,完全一样。很容易测试,当你用arr[i]替换它时会发生什么?它甚至和我[arr]一样。@ChristianRau很高兴知道这一点。@LouisTan这是很好的聚会知识,但永远不要在生产代码中使用它,它会让任何看到它而不知道它的人发疯。这会导致一些奇怪的事情,比如:i[arr]。