浏览:次 2019-11-30 14:01
一、结构体变量的定义:
1.声明一个结构体模板;格式:
struct 结构体名
{
数据类型 成员1的名字;
数据类型 成员2的名字;
······
数据类型 成员n的名字;
};
结构体的名字,称为结构体标签,作为用户自定义的结构体类型的标志,用于与其他结构体类型相区别。
构成结构体的变量,称为结构体成员。
如:
struct student
{
long studentID; /*学号*/
char studentName[10]; /*姓名*/
char studentSex; /*性别*/
int yearOfBirth; /*出生年*/
int scotrEnglish; /*英语成绩*/
int scoreComputer; /*计算机成绩*/
int scoreMath; /*数学成绩*/
int scoreProgramming; /*程序设计成绩*/
}
2.利用已经定义好的结构体数据类型来定义结构体变量
(1)先声明结构体模板,再定义结构体变量。
struct stdent stu1;
/*利用前面已经声明的结构体类型,定义一个具有该类型的结构体变量stu1*/
(2)在声明结构体模板的同时定义结构体变量。
struct student
{
long studentID;
char studentName[10];
char studentSex;
int yearOfBirth;
int score[4];
}stu1;
/*声明结构体类型的同时定义了 struct student 类型的结构体变量 stu1*/
当将结构体模板和结构体变量放在一起定义时,结构体标记是可选的,即也可不出现结构体名。
如:
struct
{
long studentID;
char studentName[10];
char studentSex;
int yearOfBirth;
int score[4];
}stu1;
/*定义了一个具有相同成员的结构体变量 stu1 */
但该方法因未指定结构体标签,不能再在程序的其他处定义结构体变量,因而并不常用。
二、用typedef定义数据类型
关键字typedef用于为系统固有的或程序员自定义的数据类型定义一个别名。
例如:
typedef int INTERGER;
/*为 int 定义了一个新的名字 INTERGER ,也就是说 INTERGER 与 int 是同义词。
*/
也可以为结构体定义一个别名。
如:
typedef struct student STUDENT;
与
typedef struct student
{
long studentID;
char studentName[10];
char studentSex;
int yearOfBirth;
int score[4];
}STUDENT;
是等价的。
都是为 struct student 结构体类型定义了一个新的名字 STUDENT
下面两条语句是等价的,二者都能用于定义结构体变量:
STUDENT stu1 stu2;
strtct student stu1 stu2;
注:typedef 只是为一种已经存在的类型定义一个新的名字而已,并未定义一种新的数据类型。
三、结构体变量的初始化
结构体变量的成员可以通过将成员的初值置于花括号之内来进行初始化。
如: STUDENT stu1 = {100310121,"王刚",'M',1991,{72,83,90,82}};
等价于: strtct student stu1 = {100310121,"王刚",'M',1991,{72,83,90,82}};
四、嵌套的结构体
嵌套的结构体就是在一个结构体内包含了另一个结构体作为其成员。
如:
typedef struct date
{
int year;
int month;
int day;
}DATE; /*先定义一个具有年、月、日成员的结构体类型*/
typedef struct student
{
long studentID;
char studentName[10];
char studentSex;
DATE birthday; /*根据这个DATE结构体模板来声明STUDENT结构模板*/
int score[4];
}STUDENT;
定义STUDENT类型的结构体变量stu1,并为其进行初始化如下:
STUDENT stu1 = {100310121,"王刚",'M',{1991,5,19},{72,83,90,82}};