8

这更像是一个语法优雅的问题,但我正在学习 C++ 并玩弄指针。如果我有一个类 Car,我可以创建一个指向该类的新实例的指针

Car * Audi = new Car;

如果该类有一个成员变量权重(例如,一个无符号整数),我可以使用任一方法访问它

(*Audi).weight

或者

Audi->weight

如果该类有一个成员变量 age 本身就是一个指针,我可以使用任何一个来访问它

*((*Audi).age)

或者

*(Audi->age)

除了这两种(诚然不是特别复杂)取消引用指针的方法之外,还有其他方法吗?我想思考

Audi->*age

会工作,但可惜它没有。

(我很欣赏访问器通常更可取,我只是感兴趣。)

4

4 回答 4

7
*(Audi->age)

您不需要括号,因为前缀运算符的优先级很低:

*Audi->age
于 2012-06-28T16:34:07.603 回答
2

没有人提到过这种方式:

Audi->age[0]
于 2012-06-28T15:18:42.020 回答
0

从语法上讲,不,除非您想编写一个函数或宏来执行此操作。你可以,但如果你问我,只需使用访问器。此外,您不想在堆上分配大多数对象。只需将它们声明为type foo;ortype foo = type()并让它们在堆栈上。除非您有特定的充分理由这样做,否则您不应该将动态分配放在堆上,因为动态分配具有很高的开销。

于 2012-06-28T15:08:25.343 回答
0

您访问指向的值的常用方法age是您提到的方法:

*(Audi->age)

->*这与指向方法的指针有完全不同的含义。

在现代 C++ 中,您通常不会过多地接触指针。可以探索,但是一旦你开始编写真正的代码,尽量避免使用指针。堆栈是你的朋友 :)

于 2012-06-28T15:16:11.383 回答