结构体引用是箭头和点的区别
时间: 2023-11-22 15:51:42 浏览: 33
在 C++ 中,结构体(struct)是一种自定义数据类型,它可以包含不同类型的数据成员。当使用结构体变量时,可以使用点号(.)或箭头符号(->)来引用其成员。
使用点号(.)引用结构体成员时,需要使用结构体变量名,并且变量名前面不能是指针。
使用箭头符号(->)引用结构体成员时,需要使用结构体指针,并且指针名后面需要加上箭头符号(->),然后再加上成员名。
下面是一个示例代码,展示了如何使用点号和箭头符号来引用结构体成员:
```c++
#include <iostream>
using namespace std;
struct Student {
int id;
string name;
};
int main() {
Student s1 = {1, "Tom"};
Student* s2 = &s1;
cout << s1.id << " " << s1.name << endl; // 使用点号引用结构体成员
cout << s2->id << " " << s2->name << endl; // 使用箭头符号引用结构体成员
return 0;
}
```
输出结果为:
```
1 Tom
1 Tom
```
可以看到,使用点号和箭头符号都能正确地引用结构体成员。但需要注意的是,如果使用箭头符号引用结构体成员时,必须保证结构体指针不为空,否则会导致程序崩溃。
相关问题
结构体变量的初始化和引用
结构体变量的初始化可以使用花括号{}初始化法,也可以使用点(.)操作符赋值法。例如:
```c
// 使用花括号初始化法
struct person {
char name[20];
int age;
};
struct person p1 = {"Tom", 25};
// 使用点操作符赋值法
struct dog {
char name[20];
int age;
};
struct dog d1;
d1.age = 3;
strcpy(d1.name, "Fluffy");
```
引用结构体变量可以使用点(.)操作符和箭头(->)操作符。点操作符用于直接访问结构体变量的成员,箭头操作符用于访问指向结构体变量的指针的成员。例如:
```c
struct person {
char name[20];
int age;
};
struct person p1 = {"Tom", 25};
struct person *p2 = &p1;
// 使用点操作符访问结构体变量的成员
printf("%s is %d years old.\n", p1.name, p1.age);
// 使用箭头操作符访问指向结构体变量的指针的成员
printf("%s is %d years old.\n", p2->name, p2->age);
```
结构体指针什么时候用箭头
结构体指针用箭头(->)的时候,是为了访问结构体指针所指向的结构体中的成员。如果使用点号(.)来访问结构体指针所指向的结构体中的成员,则会出现编译错误。
例如,假设有以下定义的结构体和结构体指针:
```
struct Person {
char name[20];
int age;
};
struct Person *p = malloc(sizeof(struct Person));
```
要访问结构体指针 p 所指向的结构体中的成员,可以使用以下两种方式:
1. 使用箭头(->):
```
strcpy(p->name, "John");
p->age = 30;
```
2. 先解引用结构体指针再使用点号(.):
```
strcpy((*p).name, "John");
(*p).age = 30;
```
但是使用箭头更加简洁和方便。