动态分配数组的元素在第一个元素后不使用 - >运算符?

Jog*_*Jog 0 c++

我正在阅读关于C++的教程,该教程演示了如何使用下标语法从数组元素调用对象的公共方法.它是这样的:

Foo* array = new Foo[2];

array->public_function();

array[1].public_function();
Run Code Online (Sandbox Code Playgroud)

现在我明白变量array指向数组的第一个元素,因此使用->运算符来访问该元素的公共数据和函数.我的问题是,为什么调用array[1]会有所不同 - 为什么它会使用.语法而不是->语法?是不是数组指针的所有元素?

mer*_*011 5

使用索引后[],您将获得对象,而不是指向对象的指针.

请考虑以下示例,该示例使用指针算法直接使用指针.

Foo* array = new Foo[2];

// Following four are equivalent.   
array[0].public_function();
array->public_function();
(array + 0)->public_function();
(&array[0])->public_function();

// Following three are equivalent.
array[1].public_function();
(array + 1)->public_function();
(&array[1])->public_function();
Run Code Online (Sandbox Code Playgroud)

  • 还有`(&array [0]) - > public_function();`和`(&array [1]) - > public_function();` (2认同)
  • StackOverflow上有三种人编辑答案:可以计算的人和不能计数的人;)@Jherico (2认同)