数据结构:成员运算符(.)+ 指向运算符(->)
在C和C++中,成员运算符(.
)和指向运算符(->
)用于访问结构体(或类)的成员。尽管它们的目的相似,但它们的用法根据你是直接操作结构体(或类)的实例,还是通过指向该实例的指针来操作而有所不同。
设 p 为指向链表结点的结构体指针,则* P 表示结点本身,因此可用 p -> data 或(* p ). data 访问* p 这个结点的数据域,二者完全等价。
成员运算符(.)左边是一个普通的结构体变量,而指向运算符(->)左边是一个结构体指针。
通过(* p ). next 可以得到指向下一个结点的指针,因此(*(* p ). next ). data 就是下一个结点中存放的数据,或者直接用 p -> next -> data
成员运算符(.
)
当你有一个结构体(或类)的实例时,你可以使用.
运算符来访问其成员(包括属性、方法等)。语法如下:
结构体类型 实例名;
实例名.成员名;
或者,对于C++中的类:
ClassName object;
object.member;
这里,成员名
是你想要访问的结构体或类的成员的名称。
指向运算符(->
)
当你有一个指向结构体(或类)实例的指针时,你需要使用->
运算符来访问其成员。这是因为指针本身不直接包含成员的值或地址,而是存储了指向结构体(或类)实例的指针。语法如下:
结构体类型 *指针名 = &实例名;
指针名->成员名;
或者,对于C++中的类:
ClassName *ptr = &object;
ptr->member;
这里,指针名是指向结构体(或类)实例的指针,成员名是你想要通过指针访问的成员的名称。
示例
假设我们有以下结构体定义:
typedef struct {
int id;
char name[50];
} Person;
我们可以这样使用.和->运算符:
Person person;
person.id = 1;
strcpy(person.name, "Alice");
Person *pPerson = &person;
pPerson->id = 2;
strcpy(pPerson->name, "Bob");
在上面的例子中,我们首先通过.运算符直接访问person实例的成员。然后,我们定义了一个指向person的指针pPerson,并通过->运算符访问相同的成员。两种方式都能达到相同的目的,但使用哪种方式取决于你是否是通过指针来访问结构体(或类)的成员。