C语言结构体与共用体

结构体

多种数据类型构成的整体

结构体定义


一般形式:
struct 结构体名
    {
        成员列表;    
    };
例:定义一个结构体类型,它包含num,name等成员
struct student
    {
        int num;
        char name[20];
        float socer;
        int age;
    };  
**注意最后的;**

**定义结构体类型变量**
1.利用已经定义过的结构体类型定义变量
例:struct student student1,student2;
graph LR
student-->结构体类型名
graph LR
student1,student2-->结构体变量名

2.声明类型的同时定义
    struct student
    {
        int num;
        char name[20];
        float socer;
        int age;
        
    }student1,student2;  

3.在结构体中定义结构体变量
    struct date
    {
        int dat;
        int month;
        int year;
    }
    struct student
    {
        int num;
        char name[20];
        float socer;
        int age;
        struct date birthday;
    }student1,student2;
    **birthday是struct date 类型**

结构体变量的引用

1.不能将结构体作为整体引用

**引用方式**
结构体变量名.成员名
    如:student1.num = 15;
多级时:
    如:student1.birthday.year = 1995;

结构体变量的初始化

struct student
{
    int num;
    char name[20];
    float socer;
    int age;
}a={10010,"liming",85,13};
printf("%d  %c  %f  %d",a.num,a.name,a.socer);
**注意**
    1."="
    2.结构体变量中是","不是";" 

结构体数组


与定义结构体变量相似,只需要把相应的结构体变量变成数组。
struct student
{
    int num;
    char name[20];
    float socer;
    int age;
}stu[3];

代表的就是:
stu[0]->10010,lihua,85,15
stu[1]->10011,xiaoming,80,10
stu[2]->10012,xiaomin,75,16

结构体数组应用

#include 

struct person
{
	char name[20];
	int count;
};
int main()
{
	struct person leader[3]={{"a",0},{"b",0},{"c",0}};
	int i,j;
	char leader_name[20];
	for(i=0;i<5;i++)
	{
		scanf("%s",leader_name);
		for(j=0;j<3;j++)
			if(strcmp(leader_name,leader[j].name)==0)
				leader[j].count++;
	}
	for(i=0;i<3;i++)
		printf("%s = %d",leader[i].name,leader[i].count);
}

结构体指针(指向结构体数据类型的指针)

1.(*p).num 等价于  p->num 等价于 student.num
其中 -> 称为指向运算符

p -> num     得到p指向结构体变量成员num的值
p -> num++   得到p指向结构体变量成员num的值,用完该值后使他加一
++p -> num   得到p指向结构体变量成员num的值加一,然后再使用它

共用体

union date      //可省略date 
{
	int count;
	char ch;
	float f;
}a,b,c;

abc三个变量公用一段内存.所以在一个时刻只能使用一个变量

你可能感兴趣的:(C语言)