C语言中结构体struct类型的用法(一)
- C语言允许用户自己建立由不同数据类型组成的组合型的数据结构,称为结构体。
声明一个结构体类型:
struct Student
{int num;
char name[20];
char sex;
};
成员也可以属于另外一个结构体类型。
struct Date
{ int month;
int day;
int year;
};
struct Student
{int num;
char name[20];
char sex;
struct Date birthday;
};
1.1 先声明结构体类型,再定义该类型的变量
struct Student student1, student2;
1.2 在声明类型的同时定义变量(不建议使用)
struct Student
{int num;
char name[20];
char sex;
} student1, student2;
1.3 不指定类型名而直接定义结构体类型变量(用的少)
struct
{int num;
char name[20];
char sex;
} student1, student2;
说明:
1.在编译时,对类型是不分配空间的,只对变量分配空间;
2.结构体类型中的成员名可以与程序中的变量名相同;
3.对结构体变量中的成员即域可以单独使用,相当于普通变量。
2 结构体变量的初始化和引用
#include <stdio.h>
int main()
{struct Student
{long int num;
char name[20];
char sex;
char addr[20];
} a = {10101, "Li Lei", ‘M’,"Beijing Road"};//定义结构体变量并且初始化
printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n", a.num, a.name, a.sex, a.addr);
return 0;
}
2.1 在定义结构体变量时可以对它的成员初始化;
2.2 C99标准允许对某一成员初始化,例如:
struct Student b={.name="zhang fang"}
.name隐含代表结构体变量b中的成员b.name,其他未被指定初始化的数值型成员被系统初始化为0,字符型成员被系统初始化为‘\0’,指针型成员被系统初始化为NULL。
引用结构体变量中的成员的值student1.num=1000;
.是成员运算符,它在所有的运算符中的优先级最高,因此可以把student1.num作为一个整体。
不能企图输出结构体变量名来达到输出结构体变量所有成员的值。
printf("%s\n",student1);//这种表达不正确
2.3 如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级地成员。
student1.birthday.month
2.4 对结构体变量的成员可以像普通变量进行运算。
student2.score=student1.score;
sum=student1.score+student2.score;
2.5 同类的结构体变量可以互相赋值。
student1=student2;
2.6 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。
scanf("%d", &stuent1.num);//输入&student1.num的值
printf("%o", &student1);//输出结构体变量&student1的首地址
但不能用以下语句整体读入结构体变量,例如:
scanf("%d,%s,%c,%d,%f,%s\n",&student1);
- 使用结构体数组
2.1 定义结构体数组一般形式是
struct 结构体名
{成员表列} 数组名[数据长度];
2.2 先声明一个结构体类型,然后再用此类型定义结构体数组:
结构体类型 数据名[数组长度];
struct Person leader[3];
2.3 对结构体数组初始化的形式是在定义数组的后面加上:
={初值表列};
struct Person leader[3]={"li",0,"zhang",0,"sun",0};
浙公网安备 33010602011771号