C++ 为什么指针使用->;而不是
可能重复:C++ 为什么指针使用->;而不是,c++,pointers,struct,C++,Pointers,Struct,可能重复: 假设我有这样的结构: struct movies { string title; int year; } my_movie, *ptrMovie; 现在我像这样访问我的电影:myu movie.year=1999现在要访问指针,我必须这样做:ptrMovie->year=1999 为什么指针使用->运算符,而普通数据类型使用运算符?有什么原因不能同时使用运算符吗?该运算符仅对结构或类有效。指针不是结构或类,因此需要取消对指针的引用以获得它指向的结构/类,如下所示
假设我有这样的结构:
struct movies
{
string title;
int year;
} my_movie, *ptrMovie;
现在我像这样访问我的电影:myu movie.year=1999代码>
现在要访问指针,我必须这样做:ptrMovie->year=1999代码>
为什么指针使用->
运算符,而普通数据类型使用
运算符?有什么原因不能同时使用
运算符吗?该
运算符仅对结构或类有效。指针不是结构或类,因此需要取消对指针的引用以获得它指向的结构/类,如下所示
(*ptrMovie).year
成员运算符
的优先级高于取消引用运算符*
,因此需要将取消引用操作括在括号中。或者你可以这样做
ptrMovie->year
两者是等价的。“->”运算符是取消引用指针然后访问结构成员的快捷方式。在我看来,它打字更少,使用起来也更好一些。显然,大多数人都同意我的观点,因为在我所见过的大多数代码中,这是从指向结构的指针访问结构成员的标准方法。当您必须执行多个级别的间接寻址时,您特别欣赏其中的差异:
ptrToStruct->memberPtr->subMemberPtr->subsubPtr->subsubsubPtr->x
(*(*(*(*(ptrToStruct).memberPtr).subMemberPtr).subsubPtr).subsubsubPtr).x
这两个语句都是等效的,但是第一个语句更容易使用。如果它们都使用的话。如何区分指针和实际对象?
对我来说:
让我想起一个箭头指向某个东西,所以我觉得使用->很好
不必键入(*myPointer)。
使用myPointer->
<。运算符访问结构的成员,并且只能对结构变量进行操作。
如果要对指针执行此操作,首先需要取消对指针的引用(使用*
),然后访问成员(使用
)。差不多
(*ptrMovie).year = 1999
->
操作符是这方面的简写 。。。因为这会让人困惑?不同的操作->不同的操作符。重复:哦…当我搜索它时,它没有出现。抱歉,我猜想“复制”是一个C问题而不是C++问题,但是C++之所以是语法的原因,是因为它是C是如何做到的。另一个问题的答案也涉及C++的兼容性。公平地说,如果我们看C++而不是C,另一个原因是运算符> < /C> >需要与运算符不同。用于实现智能指针类(operator->
必须能够重载才能穿透指针对象,但是operator.
必须是单独的且不可重载的,才能允许访问智能指针对象本身上的方法)。“。仅对结构“”有效吗?”???真正地除了默认的保护(public of Stult,PrimeObclass),Class和Stutts在C++中是可互换的。@ KeithB,是的,我知道。然而,答案却意味着相反。也许我的评论并不是特别清楚,而试图澄清是……我应该说“结构或类”,即使它们在C++中的功能是相同的。事实上,它对所有类(由类键class
、struct
、或union
)引入的类型)都有效。“运算符访问结构的一个成员,并且只能对结构变量进行操作。”???真正地类成员变量呢?我被纠正了。OP提到的结构和我限制了对C(没有类)的响应。@ Noufal,是的,但是问题是标记了C++,它既有结构又有类GLEN,结构和定义之外的类之间没有区别。C++中,结构是一类类。代码>
对所有类型的类进行操作,包括结构和联合。
(*ptrMovie).year = 1999