【C语言】【结构体】

1  前言

        在C语言中,结构体(struct)是一种用户自定义的复合数据类型,用于组合不同类型的数据项成为一个单独的实体。结构体可以包含多个成员,每个成员可以是不同的数据类型,例如整型、字符型、浮点型等,甚至可以是其他结构体类型。

        结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。

2  基本概念

2.1  定义形式

struct 结构体名{
    结构体所包含的变量或数组
};

        实例:

  • stu 为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。
  • 结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。
  • 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。
  • 结构体也可以包含除int、float、char等基本数据类型的其他数据类型,如其他结构体等
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};

2.2  复杂数据类型

  • 结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。
  • 像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。

2.3  结构体变量

        结构体是一种复合数据类型,所以它和其他数据类型相同,一样有变量名。

实例:

结构体stu是一个模板

stu1,stu2是两个结构体类型的变量。

//书写方式一
struct stu(结构体名){
    结构体所包含的变量或数组
};
struct stu stu1,stu2;
//书写方式二
struct stu(结构体名){
    结构体所包含的变量或数组
}stu1,stu2;
//书写方式三 注意:此方法不可再用这个结构体“模子”
struct {
    结构体所包含的变量或数组
}stu1,stu2;

3  结构体在内存中的存储

结构体中成员的存储是连续的,有时会存在“裂缝”

struct NULL{
    //占字节:0
};

struct stu1{
	int name;    //4
	float score; //4
	char sex;    //1
	short num;   //2
    //本应占内存字节:11=4+4+1+2
    //实际占内存字节:12
};

遇到char和short数据类型在一起可以和在一起当成4字节。

具体原因......未待完续

4  结构体成员的获取和赋值

逐一赋值

#include <stdio.h>
int main(){
    struct{ 
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组
        float score;  //成绩
    } stu1;
    //给结构体成员赋值
    stu1.name = "Tom";
    stu1.num = 12;
    stu1.age = 18;
    stu1.group = 'A';
    stu1.score = 136.5;
    //读取结构体成员的值
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
    return 0;
}

定义时,整体赋值

struct{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值