C语言中p->a相当于s.a 为什么不直接使用s.a
时间: 2024-04-25 21:26:21 浏览: 17
在C语言中,使用指针访问结构体成员变量可以通过两种方式:使用指向结构体的指针变量和使用结构体变量本身。例如,对于结构体变量s和指向结构体的指针变量p,s.a和p->a都可以访问结构体成员变量a的值。但是,使用指针访问结构体成员变量更加灵活和方便,因为指针可以指向不同的结构体,而不需要每次都重新定义一个新的结构体变量。此外,使用指针访问结构体成员变量也可以提高程序的效率。因此,在C语言中,使用指针访问结构体成员变量是一种比较常见的方式。
相关问题
在C语言中s->list是否与s.list相同
在C语言中,s->list与s.list不相同。
s->list是指向结构体s中名为list的成员的指针,而s.list是直接访问结构体s中名为list的成员。
例如,假设有以下定义的结构体:
```c
struct Example {
int list;
};
```
则以下代码:
```c
struct Example s;
s.list = 1;
struct Example* ptr = &s;
ptr->list = 2;
```
会将s中的list成员分别赋值为1和2。
但以下代码:
```c
struct Example* ptr = &s;
ptr.list = 3;
```
会引发编译错误,因为ptr是一个指针,不能像结构体一样直接访问成员。正确的方式应该是使用箭头运算符:
```c
ptr->list = 3;
```
在C语言里面,什么时候用->,什么时候用.
在C语言中,->和.都是用来访问结构体成员的运算符。其中,->是用来访问结构体指针中的成员,而.则是用来访问结构体变量中的成员。具体来说,当你需要访问一个结构体指针中的成员时,应该使用->运算符,例如:
```c
struct Student {
char name[20];
int age;
};
struct Student *stu_ptr = (struct Student *)malloc(sizeof(struct Student));
strcpy(stu_ptr->name, "Tom");
stu_ptr->age = 18;
```
而当你需要访问一个结构体变量中的成员时,应该使用.运算符,例如:
```c
struct Student {
char name[20];
int age;
};
struct Student stu;
strcpy(stu.name, "Tom");
stu.age = 18;
```