void printf_one(int i) { int j; printf("%-4s %-6s %-8s %-10s",stu[i].num,stu[i].name,stu[i].sex,stu[i].addr); for(j=0;j<3;j++) printf("%-7d",stu[i].score[j]); printf("%-7d",stu[i].sum); printf("%-12.2f\n",stu[i].ave); }
时间: 2023-12-11 10:03:18 浏览: 39
这段代码是什么意思?
这段代码定义了一个名为 `printf_one` 的函数,该函数的参数为一个整数 `i`。在函数内部,它使用 `%s` 和 `%d` 等格式化字符串来打印一些学生的信息,包括学号、姓名、性别、地址,以及三个科目的成绩、总分和平均分。其中,`stu` 是一个结构体数组,存储了学生信息。通过循环遍历三个科目的成绩,并使用 `%7d` 来保证输出的数字占用七个字符宽度。最后,在打印平均分时,使用了 `%12.2f` 来保证输出的浮点数占用十二个字符宽度,并保留两位小数。
相关问题
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; }
这段代码的输出结果是: 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
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; }
结构体 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