C++ .和->的用法和区别

485 阅读2分钟

说明

.(点号)和 ->(箭头符号)是 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() 来计算矩形的面积。

总的来说,使用点运算符 . 来访问一个结构体或对象的成员时,这个结构体或对象必须是非指针的。而使用箭头运算符 -> 时,这个对象必须是指针。