有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 07:32:30 浏览: 15
根据给出的结构体声明语句 `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`。
#include<stdio.h> #include<string.h> struct student { int id; int age; }; int main() { struct student stu1; struct student *p1 = &stu1; scanf("%d %d",p1->age,p1->id); printf("%d %d",p1->age,p1->id); return 0; } 这串代码哪里错了
这段代码有两处错误:
1. scanf() 函数中应该传入参数的地址,而不是参数的值。因此,应该将第 10 行的 scanf() 函数修改为:
```c
scanf("%d %d", &p1->age, &p1->id);
```
2. 在第 11 行中,应该使用箭头运算符 -> 访问结构体指针中的成员,而不是使用点运算符 .。因此,应该将第 11 行的 printf() 函数修改为:
```c
printf("%d %d", p1->age, p1->id);
```
修改后的代码如下:
```c
#include<stdio.h>
#include<string.h>
struct student {
int id;
int age;
};
int main() {
struct student stu1;
struct student *p1 = &stu1;
scanf("%d %d", &p1->age, &p1->id);
printf("%d %d", p1->age, p1->id);
return 0;
}
```