我正在阅读关于C ++的教程,该教程演示了如何使用下标语法从数组元素调用对象的公共方法。它是这样的:
Foo* array = new Foo[2];
array->public_function();
array[1].public_function();
现在我明白变量array
指向数组的第一个元素,因此使用->
运算符来访问该元素的公共数据和函数。我的问题是,为什么对array[1]
的调用会有所不同 - 为什么它会使用.
语法而不是->
语法?是不是数组指针的所有元素?
答案 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()
语法以保持一致性和可读性。