Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么指针使用->;而不是_C++_Pointers_Struct - Fatal编程技术网

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