这个"->"符号是什么意思?(C++)“ptr = ptr - > next”

3

可能重复:
除了箭头操作符“->”,还有什么可以使用的?
在C++中,“->”是什么意思?

我正在为一场关于数据结构和算法开发的C++考试而学习。当我查看老师的PowerPoint时,我注意到他经常使用这个“->”。我不确定它是什么意思?它真的是你可以在C++中执行的命令吗?

示例1

addrInfo *ptr = head;
while (ptr->next != NULL) 
{
        ptr = ptr->next;
}   
// at this point, ptr points to the last item

例子2

if( head == NULL )
{
head = block;
block->next = NULL;
}

只是一个额外的注释,-> 运算符被称为“指向成员”的运算符。我不确定为什么这么多人没有给它命名。 - Collin Dauphinee
5个回答

8

这是一种结合了解引用和成员访问的写法。ptr->next 等价于 (*ptr).next


5
->操作符会解除指针并从指针所指向的内存位置中检索出紧接着该指向的名称所指示的那个位置。因此,有如下操作:
struct foo {
   int bar;
   int baz;
};

struct foo something;
struct foo *ptr = &something;

ptr->bar = 5;
ptr->baz = 10;

在上述代码中,ptr 的值将是 something 结构体的内存地址(这就是 & 的功能:查找 something 的内存地址)。随后,ptr 变量被 "解引用",使用 -> 运算符,将 ptr->bar 内存地址(一个 int 类型)设置为 5,并将 ptr->baz 设置为 10。

1

-> 是指针运算符,用于指针访问成员。

如果您查看 "addrInfo" 的定义,您可以找到成员 "next"。

否则,您可以查看以下示例:

struct student
{
int num;
}
struct student stu;
struct student *p;
p=&stu;

这三个操作是等价的: 1. stu.num 2. (*P).num 3. p->num

1
它正在对指针进行取消引用操作。这意味着“给我存储在ptr指针所指地址上的东西的值”。在此示例中,ptr指向列表项,因此ptr->next返回对象的next属性的值。

1

-> 运算符是一个特定的 结构解引用。在 block->next 中,它调用指针 block 指向的对象的成员变量 next。请参阅 this 页面,了解 C++ 中的成员和指针运算符列表。

基本上,它所做的与 block.next 相同,只不过 block 是一个对象而不是一个指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接