【结构体】C语言结构体使用教程

简介: 【结构体】C语言结构体使用教程

1.结构体简介

       在日常使用中我们很多时候需要处理大量数据,为了更加规整数据,编程语言为我们提供了结构体,他可以让我们处理数据时候更加规整,逻辑更加清晰。比如我们的学生管理系统,库存管理系统........这里都可以使用我们的结构体来让我们的数据看起来更加整齐。

       结构体本质上还是一个变量,我们建立的结构体就是一种数据结构。比如我们的学生管理系统,我们需要学号,姓名,成绩,等等属性,这时候我们就可以建立一个和学生有关的结构体来把这些变量放到结构体,来处理数据。会显得十分高效。

再具体开始之前,日常求个三联。写作不易,给读者老板跪了。QAQ

2.结构体的含义

       我们先来理解一下什么是结构体,不需要看懂代码,我们先捋清我们的逻辑关系

struct student{
    int id;
    char name[100];
    int num[2];
}stu[2];

       这是一个名字叫做student的结构体,包含了id,name,num这三个元素,其中id为整型,然后name是一个字符串类型的数组,num是一个整型数组。最后的stu[2]就是我们的结构体数组

       这里来类比下excl表格来让各位能更加捋清楚关系。众所周知,数组可以理解成表格所以我绘制如下表格来帮助给理解

student

结构体数组 id name num[ 0 ] num[ 1 ]
stu[0] 1 张三 99 80
stu[1] 2 李四 98 70

       通过上表我们可以清楚的看出,我们的结构体数组是专门负责控制我们的数据行,而我们的结构体内的各个数据在应用上都和普通的应用是相同的。相信聪明的你已经看出了端倪,我们实际上就是构建了一个名叫student的表然后通过结构体数组来调整我们的数据行。你读到这里恭喜你已经基本了解结构体了,这也是最关键的一步。放个初音镇楼QWQ

3.结构体的语法

       现在你已经有了对结构体的逻辑关系了,下面就要学会去使用它了。

3.1创建一个简单结构体

       在创建一个结构体时,我们使用到关键字struct来进行创建其格式如下:

struct 结构体名字{
   结构体对象
}结构体数组;

各位要注意的是在结构体的最后一个花括号需要有分号结尾,这样才是整个语句闭合。

这里我们使用该方法创建一个结构体以便后期讲解使用代码如下:

struct student{
    int id;
    char name[100];
    int num[4];
}stu[2];

3.2给结构体赋值

       各位谨记一句话,结构体就是变量。所以在使用时候和变量没有区别。这里我没有涉及在程序内部给结构体赋值,我直接采用了传参的方法来对结构体进行赋值。

        结构体变量的调用格式为:结构体数组.结构体对象。 既然涉及到了数组,我们自然而然的想到了for循环,这里是一段伪代码,并未考虑到结构体对象存在数组的形式。

   

for ( i = 0; i < count; i++)    //只对这一行数据进行遍历
{
        scanf("%d",&stu[i].id);
}

       没错就是这么简单,这个例子是针对结构体内部为常量的情况进行赋值的

       接下来这个例子就是对我们结构体内部存在数组的情况进行赋值。

       显而易见,我们使用两个for循环,分别用来控制我们的结构体数组和我们的结构体对象的数组,这里的应用和我们的二维数组是类似的。

for ( i = 0; i < count; i++)        //控制我们的结构体数组
{
    for (size_t n = 0; n < count; n++)//控制我们的内部数组
    {
        scanf("%d",&stu[i].id[n]);
    }
}

        这里进行一个小节:结构体数组用于控制我们的具体数据行标,我们真正存的东西是在我们的结构体内部,而最开始的那个,仅仅只是我们起了一个名字罢了,对我们的程序执行不会产生影响。

3.3结构体的打印

       正所谓输出与输入相对,我们在打印结构体数据时候只需要把函数更换成printf即可完成,这里为了节省篇幅就不过多赘述,如果有问题可以在评论区提问。

4.结构体扩展内容

       有人可能会好奇不同的结构体数组是否是指同一组数据呢?这里我先卖个关子,先看笔者的实验数据。

       实验结果表明,我们重现创建的结构体数组s_t我们对其中元素进行赋值并没有影响到我们的结构体数组中的stu数组。由此可见,不同结构体数组是各自独立的,结构体仅仅是一个模板。

5.结尾彩蛋

       看到这里相信各位已经能基本使用结构体了,笔者这里为大家准备了一个和结构体有关的小题目供大家练练手。题目解析的传送门======》》》》奖学金之结构体排序

呼两个小时终于写完了,都看到结尾了,求个一键三连不过分吧QWQ

目录
相关文章
|
18天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
91 14
|
22天前
|
存储 编译器 C语言
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
100 10
|
27天前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
1月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
111 13
|
1月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
60 11
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
54 4
|
2月前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
78 10
|
2月前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
2月前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
2月前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。