struct student { int age; int num; }; struct student stu[3] = {{1001,20}, {1002,19}, {1003,21}}; int main(void) { struct student *p; p = stu; printf("%d--%d--%p--%p---%p--%d",p->num,(p++)->num,(p++),p,stu,((*p).num)); return 0; }
时间: 2024-04-21 14:24:38 浏览: 409
结构体 student 定义了两个成员变量 age 和 num。然后创建了一个名为 stu 的 student 类型的数组,包含三个元素。每个元素都是一个 student 结构体,分别具有不同的 num 和 age 值。
在主函数中,定义了一个指向 student 结构体的指针 p,并将它指向 stu 数组的第一个元素。接下来使用 printf 函数打印了一系列变量的值。
首先打印了 p->num,输出结果为 1001,表示 p 指向的第一个元素的 num 值。
然后打印了 (p++)->num,这里先使用后自增运算符,先将 p 指向的元素的 num 值输出,然后将指针 p 后移一个元素。因此输出结果为 1001。
接着打印了 (p++),输出的是指针 p 的新地址,即 stu[1] 的地址。
然后打印了 p,输出的是指针 p 的当前地址,即 stu[2] 的地址。
然后打印了 stu,输出的是 stu 数组的首地址,即 stu[0] 的地址。
最后打印了 ((*p).num),表示取指针 p 指向的元素的 num 值,由于此时 p 指向 stu[2],所以输出结果为 1003。
整个程序的输出结果为:1001--1001--地址1--地址2---地址0--1003
相关问题
有struct student{int age;int num;)stu1,*p;p=&syu1; 对结构变量stu1中成员age的正确引用是A.(*p).age B.p->age C.stu1.age D.student.age
根据给出的结构体声明语句 `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 stu = {"1001", "liming", "man", 23};
在C语言中,结构体是一种自定义的数据类型,可以用来存储不同类型的数据。结构体可以包含多个成员,每个成员可以是不同的数据类型。下面是一个示例代码,演示了如何定义一个结构体变量并初始化它的成员:
```c
#include <stdio.h>
struct Student {
char num[10];
char name[20];
char sex[5];
int age;
};
int main() {
struct Student stu = {"1001", "liming", "man", 23};
printf("学号:%s\n姓名:%s\n性别:%s\n年龄:%d\n", stu.num, stu.name, stu.sex, stu.age);
return 0;
}
```
这段代码定义了一个名为`Student`的结构体类型,它包含了学号、姓名、性别和年龄这四个成员。在`main`函数中,我们创建了一个名为`stu`的结构体变量,并使用花括号初始化了它的成员。最后,使用`printf`函数输出了结构体变量的成员值。
阅读全文