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--%p--%d",p->num,((p++)->num),(p++),p,stu,((*p).num)); return 0; }
时间: 2024-04-21 09:24:39 浏览: 10
这段代码的输出结果是: 1001--1002--0x7ffe62d9b960--0x7ffe62d9b964---0x7ffe62d9b960--0x7ffe62d9b960--1002
让我解释一下代码的执行过程:
1. 首先,定义了一个名为`student`的结构体,它有两个成员变量:`age`和`num`。
2. 然后,创建了一个名为`stu`的`student`类型的数组,其中包含三个学生的信息。
3. 在`main`函数中,定义了一个指向`student`类型的指针变量`p`。
4. 将`stu`数组的首地址赋值给指针变量`p`,即`p = stu;`。
5. 最后,使用`printf`函数打印出一系列变量的值。
现在我们来分析输出结果:
- `%d`: 打印整数类型的值
- `%p`: 打印指针类型的值
1. `p->num`: 打印指针变量`p`所指向的第一个学生结构体的`num`成员,即1001。
2. `((p++)->num)`: 先使用指针变量`p`所指向的学生结构体的`num`成员,即1001,然后指针递增一次,指向下一个学生结构体,即1002。
3. `(p++)`: 先使用指针变量`p`的值,即指向第二个学生结构体的地址,然后指针递增一次,指向下一个学生结构体的地址。
4. `p`: 打印指针变量`p`的值,即指向第三个学生结构体的地址。
5. `stu`: 打印数组`stu`的首地址,即指向第一个学生结构体的地址。
6. `((*p).num)`: 先解引用指针变量`p`,即获取指向的第三个学生结构体,然后使用点运算符获取该结构体的`num`成员,即1002。
所以最终的输出结果是:1001--1002--0x7ffe62d9b960--0x7ffe62d9b964---0x7ffe62d9b960--0x7ffe62d9b960--1002