【结构体】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

目录
相关文章
|
24天前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
30 10
|
24天前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
28天前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
28天前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
1月前
|
编译器 C语言 C++
C语言结构体
C语言结构体
25 5
|
1月前
|
编译器 Linux C语言
C语言 之 结构体超详细总结
C语言 之 结构体超详细总结
19 0
|
1月前
|
存储 编译器 Linux
深入C语言:探索结构体的奥秘
深入C语言:探索结构体的奥秘
|
1月前
|
存储 编译器 C语言
c语言回顾-结构体(2)(下)
c语言回顾-结构体(2)(下)
28 0
|
1月前
|
存储 编译器 程序员
c语言回顾-结构体(2)(上)
c语言回顾-结构体(2)(上)
28 0
|
1月前
|
存储 C语言
c语言回顾-结构体
c语言回顾-结构体
16 0