说明
.
(点号)和 ->
(箭头符号)是 C++ 中用于访问结构体、类中的成员变量和成员函数的符号。
.
一般用于访问结构体或对象的成员变量和成员函数。当使用 .
运算符时,编译器会自动解引用指针或引用变量。对于非指针或非引用的对象或变量,只能使用 .
运算符来访问成员。
->
一般用于访问指向结构体或对象的指针的成员变量和成员函数。当使用 ->
运算符时,编译器会自动解引用指针并访问其成员。
当你使用指针访问一个结构体或对象的成员时,应该使用 ->
运算符。当你不使用指针而是直接访问一个结构体或对象时,应该使用点运算符 .
。
举例
以下面这个结构体为例:
struct Point {
int x;
int y;
};
我们可以用 .
运算符来访问结构体的成员,例如:
Point p;
p.x = 0;
p.y = 0;
上面的代码中,我们用 .
运算符来访问 Point
结构体的 x
和 y
成员。
如果我们用指针来访问结构体的成员,就要使用 ->
运算符了。例如:
Point* ptr = new Point;
ptr->x = 0;
ptr->y = 0;
上面的代码中,我们用 ->
运算符来访问 Point
结构体指针 ptr
所指向的结构体的 x
和 y
成员。
在类中,也可以用 .
运算符和 ->
运算符来分别访问成员变量和成员函数。例如:
class Rectangle {
public:
int width;
int height;
int area() { return width * height; }
};
Rectangle r;
r.width = 5;
r.height = 10;
int a = r.area();
上面的代码中,我们用 .
运算符访问了类 Rectangle
的成员变量 width
和 height
,用 ()
运算符调用了类的成员函数 area()
来计算矩形的面积。
如果我们使用指向 Rectangle
类对象的指针,就要用 ->
运算符了。例如:
Rectangle* ptr = new Rectangle;
ptr->width = 5;
ptr->height = 10;
int a = ptr->area();
总结
上面的代码中,我们用 ->
运算符访问了指向 Rectangle
类对象的指针所指向的对象的成员变量 width
和 height
,用 ()
运算符调用了类的成员函数 area()
来计算矩形的面积。
总的来说,使用点运算符 .
来访问一个结构体或对象的成员时,这个结构体或对象必须是非指针的。而使用箭头运算符 ->
时,这个对象必须是指针。