此问题已在此处有答案:
Why does the arrow (->) operator in C exist?(4个答案)
6天前关闭。
社区昨天审查了是否重新打开这个问题,并将其关闭:
原始关闭原因未解决
我同意这可能是一个非常初学者的问题,但我不知道为什么我不能使用'。'来访问指向对象的指针的成员。
例如
JMP *sum_obj = new JMP("0");
JMP a;
sum_obj->number;
a.number;
sum_obj.number; // error: request for member ‘number’ in ‘sum_obj’, which is of pointer type ‘JMP*’ (maybe you meant to use ‘->’ ?)
在这里,为什么要使用->
作为sum_obj
number
成员?
2条答案
按热度按时间zy1mlcev1#
在C中,没有技术原因。一个非技术性的原因是清晰性--如果你看到一个
->
,你知道它是一个指针,可能是null,所以你可能需要在解引用它之前检查null。在C++中,有一些类在某种程度上假装是指针(
std::unique_ptr
,std::shared_ptr
,std::optional
)。它们像指针一样支持*
和->
,但它们也有自己的成员函数,可以通过.
访问。以这种方式分隔符号可以避免任何可能的成员名称冲突,同时也增加了清晰度。9jyewag02#
箭头操作符
->
用于访问指针所指向的对象的成员变量或成员函数。箭头操作符与指针一起使用,因为当我们使用点操作符.
访问成员变量或函数时,编译器会假设我们访问的是对象的成员,而不是对象的指针。