1.'->'是什么
箭头符号 ->
通常用于 C、C++ 和类似的编程语言中,表示指向结构体或类的指针成员的访问。这个符号是一个简写形式,可以看作是两个操作的组合:
- 解引用(dereferencing):通过一个指针来访问它所指向的对象。
- 成员访问运算符(member access operator): 运算符用于访问对象的成员。
例如,如果你有一个名为 ptr 的指针变量,它指向一个具有 data
成员的结构体实例,那么你可以使用如下语法来访问该成员:
cpp
ptr->data;
这等同于以下表达式:
cpp
(*ptr).data;
其中,*ptr
是解引用操作,用来获得存储在指针 ptr
中的地址所对应的结构体实例,然后 .data
是成员访问运算符,用于访问该结构体实例中的 data
成员。
这种简写形式使得代码更简洁易读,并且减少了打字次数。
2. 通过举例子加深理解
假设有一个结构体类型 Student
来表示学生信息。这个结构体有两个成员变量:name
和 score
。
cpp
struct Student {
char name[50];
int score;
};
然后你定义了一个指向 Student
结构体实例的指针数组 students
:
cpp
Student* students[100];
通过 scanf
函数来读取用户输入的数据,并使用 ->
符号来访问每个结构体实例的成员变量:
cpp
int n;
printf("Enter the number of students: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
students[i] = new Student();
printf("Enter student %d's name: ", i+1);
scanf("%s", students[i]->name);
printf("Enter student %d's score: ", i+1);
scanf("%d", &students[i]->score);
}
上述代码首先询问用户要输入的学生数量,然后使用循环来依次读取每个学生的姓名和分数,并将它们分别存储在 students
数组中的每个结构体实例的 name
和 score
成员变量中。
注意
students[i] = new Student();
是 C++ 语言中动态分配内存的语法,用于创建一个新的 Student
结构体实例,并将其地址存储在数组 students
的第 i 个元素中。 具体来说,new
关键字用于向操作系统申请一段内存空间,大小足以容纳一个 Student
结构体实例。然后,它会调用结构体的构造函数(如果有的话)来初始化这个新创建的对象,并返回该对象的地址。
最后,这个地址被赋值给数组 students
的第 i 个元素,使得我们可以通过 students[i]->name
和 students[i]->score
访问这个新创建的 Student
结构体实例的成员变量。 需要注意的是,在使用完这个结构体实例后,应该通过 delete students[i];
来释放之前使用 new
关键字分配给它的内存,以避免内存泄漏的问题。
cppfor (int i = 0; i < n; i++) { delete students[i]; }