C语言结构体数组

来源:互联网 发布:excel怎么求数据的方差 编辑:程序博客网 时间:2024/06/05 21:58

所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
定义结构体数组和定义结构体变量的方式类似,请看下面的例子:

struct stu{    char *name;  //姓名    int num;  //学号    int age;  //年龄    char group;  //所在小组     float score;  //成绩}class[5];

表示一个班级有5个学生。
【补充】
VC++中的char *name语句是什么意思?
结构体数组在定义的同时也可以初始化,例如:
我看VC++书,上面有很多例子中,定义别的变量都是很正常的int x之类的,但一到了字符型变量就会在变量名前加号,类似char *name之类的,请问这个号有什么说法吗?char name是合法的吗?谢谢!

char *name = "abcd";

这里写图片描述
1)name是一个变量;
2)这个变量的类型是指针,指针其实就是地址,如图所示,name的值是’a’字符占用内存的地址;

**c语言 char *name=”xx”, 这是什么意思?
是将字符串常量xx的首地址赋值给name**
name的地址是xx

结构体数组在定义的同时也可以初始化,例如:

struct stu{    char *name;  //姓名    int num;  //学号    int age;  //年龄    char group;  //所在小组     float score;  //成绩}class[5] = {    {"Li ping", 5, 18, 'C', 145.0},    {"Zhang ping", 4, 19, 'A', 130.5},    {"He fang", 1, 18, 'A', 148.5},    {"Cheng ling", 2, 17, 'F', 139.0},    {"Wang ming", 3, 17, 'B', 144.5}};

当对数组中全部元素赋值时,也可不给出数组长度,例如:

struct stu{    char *name;  //姓名    int num;  //学号    int age;  //年龄    char group;  //所在小组     float score;  //成绩}class[] = {    {"Li ping", 5, 18, 'C', 145.0},    {"Zhang ping", 4, 19, 'A', 130.5},    {"He fang", 1, 18, 'A', 148.5},    {"Cheng ling", 2, 17, 'F', 139.0},    {"Wang ming", 3, 17, 'B', 144.5}};

结构体数组的使用也很简单,例如,获取 Wang ming 的成绩:

class[4].score;

修改 Li ping 的学习小组:class[0].group = 'B';
与其叫结构体数组,不如叫数组的结构体

#include <stdio.h>struct{    char *name;  //姓名    int num;  //学号    int age;  //年龄    char group;  //所在小组    float score;  //成绩}class[] = {    {"Li ping", 5, 18, 'C', 145.0},    {"Zhang ping", 4, 19, 'A', 130.5},    {"He fang", 1, 18, 'A', 148.5},    {"Cheng ling", 2, 17, 'F', 139.0},    {"Wang ming", 3, 17, 'B', 144.5}};int main(){    int i, num_140 = 0;    float average, sum = 0;    for(i=0; i<5; i++){        sum += class[i].score;        if(class[i].score < 140) num_140++;    }    printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum/5, num_140);    return 0;}

运行结果:
sum=707.50
average=141.50
num_140=2

0 0
原创粉丝点击