C语言 结构体知识

结构体

结构体是一种自定义数据类型,用于存储多个不同数据类型的数据

和数组不同,数组是存储多个同种类型的数据的。

根据需求创建结构体数据类型,需求不一样创造出的结构体数据类型就不一样。

        如何构造结构体类型:​​​​​​​

        格式

        struct 结构体名

        {

                成员类型 成员名;

                成员类型 成员名;

                .....

           };

struct : 结构体关键字

结构体名:自定义的名称

成员类型:所有学过的数据类型都可以作为成员类型,具体看存储什么数据。

成员名:自定义的名称

eg:统计学生信息:学号    姓名    班级  成绩

                              字符串  字符串  整型  实型   

struct student

{

        char sno[21];

        char name[21];

        int classNum;

        float score;

};

结构体数据类型的名字struct student  ---( 类似:int  float)

定义结构体类型的时候,不会开空间。

定义位置:

一般在使用之前定义即可,但是建议 放在预处理下面,函数的外面 -- 全局

头文件.h里面

​​​​​​​给数据类型起别名 -- typedef

        typedef 给已有的数据类型起别名

        格式:typedef 数据类型  别名;

        typedef unsigned char u8;

        typedef unsigned short u16;

        typedef unsigned int u32;

给结构体类型起别名:

形式一:先定义结构体,然后再用typedef起别名。

struct student

{

        char sno[21];

        char name[21];

        int classNum;

        float score;

};

typedef struct student STU;

形式二--- 建议使用:

typedef struct student

{

char sno[21];

char name[21];

int classNum;

float score;

}STU;

// 结构体类型名字:struct student   /  STU

// 结构体类型名字:STU -- 并且这种结构体不能作为这个结构体本身的成员类型。

建议别名大写和变量进行区分。

​​​​​​​结构体变量  -- 在内存里面开空间

        ​​​​​​​定义:

        结构体类型  变量名;

        typedef struct student

        {

                char sno[21];

                char name[21];

                int classNum;

                float score;

          }STU;

// 数据类型:struct student / STU

STU a;

struct student b;

// 通过结构体变量获取成员然后对成员进行读写操作  ---  点语法  -- 结构体变量名.成员名

// 获取成员后要按照成员的类型进行下一步操作。

// "20200906"  "小明"  1   96.5

strcpy(a.sno,"20200906");

strcpy(a.name,"小明");

a.classNum = 1;

a.score = 96.5;

​​​​​​​变量初始化操作

        typedef struct student

        {

                char sno[21];

                char name[21];

                int classNum;

                float score;

        }STU;

        STU b = {"20200908","小红",2,100};  // {}是结构体的大括号,因为结构体有多个成员,就有            多个值。

     // 按照定义结构体类型的时候的成员顺序赋值,不能跳跃赋值。

    STU c = {"20200910","",3,100}; // 不能跳跃赋值,不知道的成员值可以暂时留空。

​​​​​​​结构体变量可以整体赋值

        typedef struct student

        {

                char sno[21];

                char name[21];

                int classNum;

                float score;

           }STU;

STU b = {"20200908","小红",2,100};

STU c;  // 将b中的数据写入到c空间中去

c = b;//整体赋值将结构体b赋值给结构体c

​​​​​​​结构体数组

是数组 ,里面存放的数据是多个结构体体。

​​​​​​​​​​​​​​        定义格式:

        结构体类型 数组名[元素个数];

        typedef struct student

        {

                char sno[21];

                char name[21];

                int classNum;

                float score;

        }STU;

// 定义一个数组,用来存放3个同学的信息。

STU arr[3];  --- 在内存里面开空间的。

​​​​​​​结构体数组空间进行空间读写操作

// 拷贝赋值

数组名[下标].成员名  --- 接下来看成员是什么类型决定下一步操作。

strcpy(arr[0].sno,"20200908");

strcpy(arr[0].name,"小明");

arr[0].classNum = 3;

arr[0].score = 96;

// 输入赋值

int i = 1;

for(i=1;i<3;i++)

{

        printf("请输入学号:");

        scanf("%s",arr[i].sno);   // &a.sno[0]

        printf("请输入姓名:");

        scanf("%s",arr[i].name);   

        printf("请输入班级:");

        scanf("%d",&arr[i].classNum);

        printf("请输入成绩:");

        scanf("%f",&arr[i].score);

}

// 输出:

for(i=0;i<3;i++)

{

        printf("%s %s %d %.2f\n",arr[i].sno,arr[i].name,arr[i].classNum,arr[i].score);

}​​​​​​​

结构体数组初始化:

typedef struct student

{

        char sno[21];

        char name[21];

        int classNum;

        float score;

}STU;

STU arr[3] = {{"20200920","小明",1,90},{"20200910","小王",3,100}};  

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值