有struct student{int age;int num;)stu1,*p;p=&syu1; 对结构变量stu1中成员age的正确引用是A.(*p).age B.p->age C.stu1.age D.student.age
时间: 2024-04-02 13:32:30 浏览: 55
根据给出的结构体声明语句 `struct student{int age; int num;} stu1, *p; p = &stu1;`,我们可以得知:
- `stu1` 是一个 `struct student` 类型的结构体变量。
- `p` 是一个指向 `struct student` 类型的结构体变量的指针,它指向变量 `stu1`。
因此,结构变量 `stu1` 中成员 `age` 的正确引用方式是选项 B. `p->age`。
选项 A. `(*p).age` 的引用方式也是正确的,表示通过指针 `p` 访问结构体变量 `stu1` 的成员 `age`。
选项 C. `stu1.age` 的引用方式也是正确的,表示直接访问结构体变量 `stu1` 的成员 `age`。
选项 D. `student.age` 的引用方式是错误的,因为 `student` 是结构体类型名,不是结构体变量名,应该改为 `struct student.age`。
综上所述,选项 B. `p->age` 是结构变量 `stu1` 中成员 `age` 的正确引用方式。
相关问题
struct Student { char name[20]; int age; float score; };struct Student *pStu = &stu;&stu是否代表结构体首地址?
不是的。在代码中没有定义变量 `stu`,所以不可能使用 `&stu` 来代表结构体的首地址。正确的写法应该是先定义一个 `struct Student` 类型的变量,再将该变量的地址赋值给指针变量 `pStu`。例如:
```
struct Student stu = {"Tom", 18, 90.5};
struct Student *pStu = &stu;
```
其中 `&stu` 表示变量 `stu` 的地址,也即结构体首地址。这个地址被赋值给指针变量 `pStu`,使得 `pStu` 指向了结构体变量 `stu`。
struct Student { char name[20]; int age; }; struct Student student; Student *s_ptr = &student; 我有点好奇,如果不使用->这个访问,输出的结果是m
在这段C语言代码中,`struct Student` 定义了一个名为 `Student` 的结构体,包含两个成员:一个字符数组 `name` 和一个整数 `age`。
`struct Student student;` 声明了一个名为 `student` 的 `Student` 类型的变量,这实际上是一个结构体实例。
`Student *s_ptr = &student;` 创建了一个指向 `Student` 结构体的指针 `s_ptr` 并将其初始化为 `&student`,即指向 `student` 变量的地址。
当你提到 "如果不使用->",通常指的是不使用指针成员访问运算符(`->`),而是直接使用点号`.` 来访问结构体的成员。在这种情况下,如果你想通过 `s_ptr` 指针访问 `name` 字符数组,你应该这样做:
```c
printf("%s", s_ptr->name); // 使用->访问结构体成员
```
如果直接写成 `printf("%s", s_ptr.name);`,那么 C 语言会试图根据 `s_ptr` 的类型(在这里是 `Student *` 或者指针)去寻找 `name` 成员,而不是从实际的 `Student` 实例中查找。由于没有使用 `->`,编译器可能会报错或行为不确定,特别是如果 `name` 不是全局变量或者静态局部变量。
如果你只是想打印 `name` 字符数组的内容,并假设 `name` 已经被赋值了,那么可能是指针 `s_ptr` 没有正确地指向 `name` 的开始位置,所以结果可能是乱码或者未定义的行为。要确保正确访问,请确保你在使用之前已经给 `s_ptr` 初始化并指向正确的内存区域。
阅读全文