C语言 结构体struct总结

本文详细介绍了C语言中结构体的声明、定义、初始化、成员访问,以及结构体数组、结构体指针、共用体和枚举的使用。此外,还涵盖了typedef在类型定义上的便捷应用。适合初学者理解数据结构在C语言中的关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.前言

C语言提供了一些由系统提供好的数据类型,如:int,float,char等,用户可以在程序中用他们定义变量,解决一般的问题,但是在实际问题中只有这些数据类型是不够的,有时候我们需要其中的几种一起来修饰某个变量,在此情况下,使用简单的基本数据类型甚至是数组都是很困难的;我们就需要自己建立一些数据类型,并用它来定义变量。

二.结构体的引入

1.结构体的定义:由不同类型数据组成的组合型的数据结构称为结构体。

2.结构体的优点:结构体不仅可以记录不同类型的数据,而且使得数据结构是“高内
聚,低耦合”的,更利于程序的阅读理解和移植,结构体的存储方式可以提高CPU对内
存的访问速度。

三.结构体声明

我们以一个学生信息为例来说明

struct Student{
   
            //声明结构体
    char name[20];      //姓名
    char sex;			//性别
    int age;			//年龄
    int num;            //学号
    float score;        //成绩
};						//注意最后有一个分号

上述代码Student 是自定义的结构体名,与struct构成一个新的类型名,name ,sex,age,num,score是结构体内的各个成员,对于成员都应进行类型声明,即

类型名 成员名;

上述结构体的组织结构:
在这里插入图片描述

声明一个结构体类型的一般形式为:

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

说明:

  1. 定义一个结构体类型只是进行了描述,编译时并不分配存储空间,所以不能对定义的结构体类型进行赋值。
  2. 大括号里的内容为结构体成员,结构体成员可以是简单变量,数组,指针,也可以是结构体共用体等。
  3. 结构体类型定义可以放在函数内部,也可以放在函数外部;放在内部:只在函数内部有效;放在外部:所有函数有效。(类似全局变量和局部变量
  4. 同一结构体内各成员不可以重名,成员名可以和程序中变量名相同,系统会识别。
  5. 最后的分号不要忘了这个分号也相当于是一个语句,有的编译器会自己加上。

对于说明的第二点进行举例
如果结构体中成员为结构体时:

struct Student{
   
            //声明结构体
    char name[20];      //姓名
    char sex;			//性别
    struct data_type birthday //生日
    int num;            //学号
    float score;        //成绩
};		

这个结构体的组织结构为:
在这里插入图片描述
相比于最初的组织结构,如果结构体成员为结构体时也是合理可行的。

四.结构体变量的定义

之前结构体的声明只是告诉编译器该如何表示数据,但是它没有让计算机为其分配空间。我们要使用结构体,那么就需要创建变量,也就是结构体变量。
结构体变量定义的三种形式:

1.先定义类型,在定义变量:

struct Student{
   
            //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
};
struct Student stu1;    //定义结构体变量

最常用的方法,较直观。

2.定义类型的同时定义变量

struct Student{
   
           
    char name[20];       
    int num;             
    float score;         
}stu1;                  //在定义之后跟变量名

是形式一的简略形式。

3.直接定义结构体变量,省略结构体名

struct {
   
                   //没有结构名</
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mi ronin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值