C语言结构体

2020-12-17  本文已影响0人  YanZi_33
什么是结构体

结构体是一种自定义的复合型的数据类型,可以由多种不同数据类型组成的数据集合.

结构体的声明

struct 结构体名
{
成员列表
};

struct Student
{
    int age;
    float height;
    char sex;
    double weight;
    char name[20];
};
结构体变量的声明
struct Student
{
    int age;
    float height;
    char sex;
    float weight;
    char name[20];
}student;

声明了一个结构体变量student,是一个全局的结构体变量.

struct 结构体名 变量名

struct Student student1;
struct Student student2;

声明了两个结构体变量student1与student2,属于局部的结构体变量.

结构体变量的初始化
struct Student student1 = {30,172.5,'1',150.55,"liyanyan"};

大括号中的数据与结构体中的变量一一对应.

struct Student student2;
student2.age = 30;
student2.height = 172.5;
student2.sex = '1';
student2.weight = 150.55;
strcpy(student2.name,"liyanyan");
结构体变量访问成员

结构体变量名.成员名

printf(" age = %d\n",student2.age);
printf(" height = %f\n",student2.height);
printf(" sex = %c\n",student2.sex);
printf(" weight = %f\n",student2.weight);
printf(" name = %s\n",student2.name);
Snip20201217_26.png

通过(.)点号直接访问成员.

结构体的嵌套
struct BirthDay
{
    int year;
    int month;
    int day;
};

struct Student
{
    int age;
    float height;
    char sex;
    double weight;
    char name[20];
    struct BirthDay birthday; //生日日期结构体
};

Student结构体中嵌套了BirthDay结构体

struct Student student1 = {30,172.5,'1',150.55,"liyanyan",{1990,07,07}};
 
struct Student student2;
student2.age = 30;
student2.height = 172.5;
student2.sex = '1';
student2.weight = 150.55;
strcpy(student2.name,"liyanyan");
student2.birthday.year = 1990;
student2.birthday.month = 07;
student2.birthday.day = 07;
    
printf(" age = %d\n",student2.age);
printf(" height = %f\n",student2.height);
printf(" sex = %c\n",student2.sex);
printf(" weight = %f\n",student2.weight);
printf(" name = %s\n",student2.name);
printf(" birthday.year = %d\n",student2.birthday.year);
printf(" birthday.month = %d\n",student2.birthday.month);
printf(" birthday.day = %d\n",student2.birthday.day);
Snip20201217_27.png
结构体作为函数形参
void printfStuent(struct Student);
void printfStuent(struct Student student)
{
    printf(" age = %d\n",student.age);
    printf(" height = %f\n",student.height);
    printf(" sex = %c\n",student.sex);
    printf(" weight = %f\n",student.weight);
    printf(" name = %s\n",student.name);
    printf(" birthday.year = %d\n",student.birthday.year);
    printf(" birthday.month = %d\n",student.birthday.month);
    printf(" birthday.day = %d\n",student.birthday.day);
}

struct Student student2;
student2.age = 30;
student2.height = 172.5;
student2.sex = '1';
student2.weight = 150.55;
strcpy(student2.name,"liyanyan");
student2.birthday.year = 1990;
student2.birthday.month = 07;
student2.birthday.day = 07;
    
//传入结构体参数
printfStuent(student2);

结构体指针的声明

struct 结构体名 *指针变量名

//声明一个结构体变量
struct Student *student
结构体指针的声明与初始化
//声明一个结构体变量
struct Student student2;
//1.声明直接初始化
struct Student *student = &student2;
//2.先声明再初始化
struct Student *student3 = NULL;
student3 = &student2;
结构体指针访问成员

结构体指针变量名->成员名

struct Student student2;
//声明直接初始化
struct Student *student = &student2;
student->age = 30;
student->sex = '1';
student->weight = 150.5;
结构体的内存占用

结构体是把不同类型的数据组合成一个整体,其变量是共存的,变量不管是否使用,都会分配内存。
缺点:所有属性都分配内存,比较浪费内存,假设有4个int成员,一共分配了16字节的内存,但是在使用时,你只用一个int成员,也就是使用了4字节,剩余的12字节就是属于内存的浪费。
优点:存储容量较大,包容性强,且成员之间不会相互影响。

上一篇 下一篇

猜你喜欢

热点阅读