目录
定义和使用结构体类型
建立/声明 结构体类型
struct Student
{
int num;
char name[20];
char sex;
};
声明一个结构体类型的一般形式为
struct 结构体名
{成员表列};
注意,成员表列中的成员也可以是结构体类型。
定义结构体类型变量
第一种:声明结构体变量和定义结构体变量分离。
例如
struct Student//结构体变量声明
{
int num;
char name[20];
char sex;
};
struct Student a,b;//结构体变量定义
这里的定义可理解成 int a,b; 类型
第二种:在声明类型的同时定义变量
例如
struct Student//结构体变量声明
{
int num;
char name[20];
char sex;
} student1,student2;//结构体变量定义
这里student1和student2就是被定义的变量名称
这种定义方法的一般形式为
struct 结构体名
{成员表列
}变量名表列;
在写小程序时,用这种方式比较方便,但是写大程序时,往往要求对类型的声明和对变量的定义分别放在不同的地方,以使程序结构清晰,便于维护,所以一般不多用这种方式。
第三种:不指定类型名而直接定义结构体型变量
其一般形式为
struct
{成员表列
}变量名表列;
指定了一个无名的结构体变量,没有名字。
结构体变量的初始化和引用
例题及代码
把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。
#include <stdio.h>
int main()
{struct Student //声明结构体变量
{long int num;
char name[20];
char sex;
char addr[20];
}a = {10101,"Li Lin",'M',"123 Beijing Road"}; //定义结构体变量a并初始化
printf("No.:%ld\nname:%s\nsex:%c\naddress:%s\n",a.num,a.name,a.sex,a.addr);
return 0;
}
(1)定义时可以直接对成员初始化,始化列表是用花括号括起来的。
C99标准允许对某一成员进行初始化,如:
struct Student b={.name="Zhang Fang"}; //其中成员名前有成员运算符"."
其中".name"隐含代表结构体变量b中的成员b.name。其他未初始化的成员被系统初始化为0,字符型则被系统初始化为'\0',指针成员被系统初始化为NULL。
(2)引用结构体变量中成员的值,引用方式为:
结构体变量名.成员名
“.”是成员运算符,优先级是所有运算符中最高的。
(3)只能对最低级的成员进行复制或存取以及运算
(4)同类的结构体变量可以互相赋值
student1=student2; //假设student1和student2已定义为同类型的结构体变量