C:结构体基础全面总结

本文全面总结了C语言中的结构体,包括结构体变量的定义与赋值,结构体成员的获取,结构体数组,结构体指针的使用,以及结构体在函数传参和返回值中的应用。通过实例解析了结构体嵌套、结构体数组的创建和访问,以及结构体指针如何访问成员。
摘要由CSDN通过智能技术生成

说明:

借此博客融合了网络上各处资源对C语言结构体进行总结(参考来源在文末),对自己也是一个复习的提示,可能出现的错误还请大佬们多多指点。

C语言结构体

数组(Array)是一组具有相同类型的数据的集合。在实际的编程中还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,不能用一个数组来存放。在C语言中,可以使用结构体(struct)来存放一组不同类型的数据。结构体的定义形式为:

struct 结构体名{
   
    结构体所包含的变量或数组(称为结构体**成员**)
};
//切记分号一定不能忘,这是一条完整的语句!!!

另外,可以利用typedef对结构体类型重命名,减少工作量:

typedef struct Student
{
   
	int a;
}Stu;
Stu exam;

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

结构体变量

结构体是一种数据类型,则可以用于定义变量:

struct stu stu1, stu2;
//或者
typedef struct Student
{
   
	int a;
}Stu;
Stu exam1,exam2;

可以在定义结构体的同时定义结构体变量,将变量放在结构体定义的最后即可。

struct stu{
   
    char *name;  //姓名
    //结构体中声明中尽量使用字符指针进行字符串操作,在初始化的时候会方便
    //如果使用的是字符数组,那么会就要使用strcpy进行拷贝初始化
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
} stu1, stu2;

打个比方,stu或者Stu就像一个“模板”,不占用内存空间,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,需要内存空间来存储,根据同一张图纸生产出来的零件的特性都是一样的。

结构体成员的获取和赋值

数组使用下标[ ]获取单个元素,结构体使用点号.获取单个成员。通过这种方式可以获取成员的值,也可以给成员赋值:获取结构体成员的一般格式为:

结构体变量名.成员名;
 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);

除了可以对成员进行逐一赋值,也可以在定义时整体赋值,例如:

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

结构体嵌套

结构体嵌套,可用下图形象说明:在这里插入图片描述

结构体嵌套结构体,示例如下:

struct date
{
   
    int month;
    int day;
    int year;
};
struct student
{
   
    int num;
    char name
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值