C语言学习笔记

之  结构体变量与结构体数组


1.结构体类型

struct student

{

  int num;

  char name[20];

  char sex;

  int age;

  float score;

}//要加“;”

struct student  student1,student2;

struct student

{

  int num;

  char name[20];

  char sex;

  int age;

  float score;

} student1,student2;

//加“;”

struct

{

  int num;

  char name[20];

  char sex;

  int age;

  float score;

} student1,student2;

2.含义

  以上可以说是结构体的三种形式,结构体是看以看做一个整体,是一个集合,集合中可以包含任意的类型,可以是int,可以是charfloat.

一个学生的信息最适合用结构体来表示了,因为学生的信息有学好num,名字name, 年龄性别等等。Struct是结构体定义的符号,结构体内定义信息。可以表示为下图所示:



  一个学生的信息用结构体表示出来后,就可以用了,要进行创建对象,有两种方式,

在结构体之外进行定义(struct student  student1,student2;)和 在结构体定义的时候定义(} student1,student2;)。这两种方式都是可以的,上述就是新创建了两个新的学生student1student2

    若想将其中的age换成出生日期,如下图:



 可以先定义一个struct date日期类型。


struct date
{
  int year;
  int month;
  int day;
};
struct student
{
   int num;
   char name[20];
   char sex;
   struct date birthday;//引用struct date,定义为birthday
   float score;
} student1,student2;


 上述中struct student中的成员birthday被定义成了struct date类型,那么birthday就有了struct date的属性。

3.结构体变量的引用

 结构体变量的引用无非就是引用结构体中的成员。它的引用方式为:

结构体变量名 . 成员名

比如:student 1 .score ,它表示学生stucent 1的分数,中间必须得有“.”,这个点是成员运算符,比如:student 1.score=89.6

当成员本身又是结构体类型时的子成员访问应该是:student 1.birthday.year

同一种类型的结构体变量之间可以直接赋值:比如:student 1=student 2

可以把一个结构体变量中的内嵌结构体类型成员赋给同种类型的另一个结构体变量的相应部分:student 2.birthday=student 1.birthday

4.结构体变量的初始化


#include <stdio.h>
struct student
{
   int num;
   char name[20];
   char sex[2];
   int age;
   float score;
   /*结构体变量的初始化*/
}student1={11301,"zhaoyuqiang","F",22,450};
main()
{
//输出成员变量
   printf("学号=%d\n名字=%s\n",student1.num,student1.name);
   printf("分数=%f\n",student1.score);
}


5.结构体数组


struct student
{
   int num;
   char name[20];
   char sex;
   int age;
   float score;
} student 1,stu[30];


 上述定义了一个结构体变量student 1和一个结构体数组stu,这个数组有30个元素,每一个元素都是 struct student 类型的,如下图所示:


Num

Name

Sex

Age

Score

Stu[0]

11301

Zhangping

F

56

89

........

..........

........

........

........

........

Stu[29]

11302

Liheng

M

12

56

调用的时候用stu[i].score调用,i为数组下标元素


#include <stdio.h>
struct student
{
   int num;
   char name[20];
   char sex;
   int age;
   float score;
};
struct student stu[4]={{11301,"zhaoyuqiang",'F',19,458.6}, {11302,"lizheng",'F',18,456.6},
{11305,"xuefeiyang",'M',20,168.9}};//数组的初始化,要定义在结构体外部或者静态数组才能初始化。
main()
{
   int i;
   float a=0,s=0;
   for(i=0;i<4;i++)
   {
       a=a+stu[i].age;
   s=s+stu[i].score;
   }
   printf("平均年龄是%f\n",a/4);
   printf("平均成绩是%f\n",s/4);
}