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

时间:2014-07-18 22:37:04

标签: c++

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

Foo* array = new Foo[2];

array->public_function();

array[1].public_function();

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

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

您可以将其视为[]运算符返回对Foo的引用,因此您使用.运算符来访问其成员。

答案 2 :(得分:1)

array->public_function()(*array).public_function()相同,与array[0].public_function()相同。您正通过指向public_function()对象实例的原始指针访问Foo。编译器没有概念指针实际上是Foo个实例的数组。就像你说的那样,array只是指向数组中第一个元素的指针。所有上述语法在任何对象指针上都有效。由于您正在处理数组,因此您应该坚持array[0].public_function()语法以保持一致性和可读性。