标准C语言基础知识13-程序员宅基地

结构:
    结构是一种由程序员自己设计的数据类型,用于描述一个事物的各项数据,由若干个不同的基础类型组成。
    
    设计:
    struct 结构体名
    {
        类型1 成员名1;
        类型2 成员名2;
        ...
    };

    定义结构变量:
        struct 结构体名 变量名;
        注意:在定义结构变量时,struct不能省略
    
    结构体变量初始化:
        struct 结构体名 变量名 = {v1,v2,v3...};
        注意:必须要根据成员设计的顺序初始化

        struct 结构体名 变量名 = {.成员名1=v1,.成员名3=v3,...};
        只初始化某些成员,可以不用按照顺序初始化

        注意:同类型的结构体变量可以直接给结构体变量初始化、赋值

    访问成员:
        结构变量名.成员名

        结构指针->成员名
    结构变量作为形参时:
        由于结构变量字节数都比较大,值传递的效率比较低,因此都传递结构体变量的地址,如果不需要修改结构体变量的值,可以使用const 保护

    练习1:设计一个教师结构体,成员有姓名、性别、工号、工龄,定义一个教师结构体变量,使用scanf输入各个成员的值并显示出来。

    typedef重定义结构体类型:
        typedef struct 结构体名 结构体名;
        typedef struct 结构体名
        {
            ...
        }结构体名;
        之后可以不使用struct关键字来定义结构变量

    注意:一般结构体变量存放在堆内存中

如何计算字节数
    结构体成员的顺序会影响它的总字节数,如果能够在设计结构体时,合理安排成员的顺序可以大大节约内存
    内存对齐:
        假定第一个成员是从零地址开始,存储每个成员的地址编号必须满足能被该成员的字节数整除,如果不能整除则填充空白字节
    内存补齐:
        结构体的总字节数,必须是它最大成员的字节数的整数倍,如果不是则在末尾填充空白字节
        在Linux系统下计算结构体的对齐、补齐时,如果成员的字节数超过4个字节,则按照4个字节计算  
        window系统是按照实际情况计算


        #pragma pack(n) 设置对齐,补齐的最大字节数, n<=默认4 (1,2,4)


联合:union
    联合与结构的使用方法基本一致,与结构的区别是所有成员共用一块内存,一个成员的值发生改变,其他成员也会随着改变
    联合就是使用少量的内存对应多个标识符,来达到节约内存的目的,现在基本上不使用了

    联合常考的笔试题:
        union Date
        {
            char[5];
            int num;
        };// 字节数是8
        注意:计算联合的字节数要考虑内存的补齐,联合天然是内存对齐
    
    如果判断操作系统是大小端?
        假如十六进制整数(高位)0x01020304存储在以0x0A起始的四个字节内存中
        高位数据存储在高位地址:(0x0A:04 0x0B:03 0x0C:02 0x0D:01)小端系统
        高位数据存储在低位地址:(0x0A:01 0x0B:02 0x0C:03 0x0D:04)大端系统
        
        结合联合实现
    
        个人计算机系统一般都是小端系统,而UNIX服务器和网络设备都是大端系统
        本地字节序是小端模式,网络字节序是大端模式
        
        序列化和反序列化(JSON\xml)


枚举:enum
    枚举就是把一种数据类型可能出现的所有值全部罗列出来,取一个有意义的名字,除次之外的数据,如果赋值给该枚举变量就是非法的(愿望)

    枚举可以看做是指受限的int类型,但C编译器为了效率不会检查,所有C语言的枚举变量可以当做int类型使用,一般会直接使用起好名字的枚举成员(锦上添花)
    enum Direction
    {
        UP = 183,
        DOWN = 184,
        RIGHT = 185,
        LEFT = 186,
    };
    如果不给成员值,枚举常量的值默认从0开始,依次+1,如果某个设置了值,后面的会在该值的基础上逐渐+1
    enum Direction{UP,DOWN,RIGHT,LEFT};

    为什么要使用枚举:
        为无意义的数值起一个有意义的名字,提高代码可读性,并且有相对较高的安全性

    作业:使用结构体完成通讯录

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44404012/article/details/119277131

智能推荐

经典JS-序列号_ucfp:74a28a8b-b3fb-4602-ca5f-0ebdf880c1ff-16927960-程序员宅基地

文章浏览阅读10w+次。3D0E1D4E75686FA0FF1C6F6F626F6F6F6F6F6F6F8F381B2FFF2D6FEF396F6F6A1B6E6F6D762B39E3021B282C725C726F4F6F6F6F5F5F5C330E1F06251C335B5E0D580E5E095D575B0E56560B5F0B41051C6F9F4FCC60636EBE7FBE7A3E637EB613394327_ucfp:74a28a8b-b3fb-4602-ca5f-0ebdf880c1ff-1692796091560

Linux下使用crontab定时任务进行Tomcat日志分割_crontab多个任务如何分割-程序员宅基地

文章浏览阅读722次。Linux下使用crontab定时任务进行Tomcat日志分割_crontab多个任务如何分割

AGV小车导航控制 研一《智能控制》课程文献阅读作业_四轮agv传递函数-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏55次。摘要AGV(即自动导向小车)是一种集控制、定位、各种传感器技术于一体的设备。随着智能车技术的不断发展,智能车的应用范围和功能都将大为拓展,现已逐渐用于工业与民用领域。但是由于负载变化、使用环境条件恶劣等原因,在实际运用时AGV小车在定位及控制上依然有许多难点需要攻克。本文即针对上述难点,研究并设计了一种新型的驱动方式和控制系统,利用模糊控制与PID控制相结合的方法,在开机初期误差矫正快,后期平稳,可以迅速跟踪期望轨迹。在实验状态下,运行速度为1米每秒时,0.5米的误差约5秒即可消除,达到稳定状态。引言_四轮agv传递函数

Android XML文件使用-程序员宅基地

文章浏览阅读230次。转自:http://www.cnblogs.com/zhengtao/articles/1924940.html一、布局文件:在layout目录下,使用比较广泛;  我们可以为应用定义两套或多套布局,例如:可以新建目录layout_land(代表手机横屏布局),layout_port(代表手机竖屏布局),系统会根据不同情况自动找到最合适的布局文件,但是在同一界面的两套不同布局文

std::thread和std::this_thread的详细说明-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏13次。std::thread类来表示执行的各个线程。执行线程是实际上是执行一系列指令,可以在多线程环境中与其他此类序列同时执行,同时共享相同的地址空间。std::this_thread命名空间包含了对当前线程的一些基本操作,如获取当前线程id、休眠当前线程、让渡当前线程的时间片给其他线程等。_std::this_thread

jQuery 父元素选择器 parent() 和 parents()_jquery父元素选择器-程序员宅基地

文章浏览阅读7.7k次。jQuery的父元素选择器小编很少使用,但却看到不少web开发者们经常使用。小编个人是不太推荐使用父元素选择器的。因为如果是列表的情况下,在循环时可以将当前的索引绑定给需要点击的按钮,通过索引查找元素。本篇文章在小编不推荐的情况下,还是决定写一篇。先来一段 HTML结构代码<table class="table table-bordered" id="user..._jquery父元素选择器

随便推点

[TypeScript][JavaScript]数组遍历方法总结_typescript 数组遍历-程序员宅基地

文章浏览阅读1.2k次。本文整理自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array对比every(),some(),includes(),indexOf(),lastIndexOf(),find(),findIndex(),forEach(),map(),filter(),fill()..._typescript 数组遍历

MySQL数据库的基本概念与安装-程序员宅基地

文章浏览阅读1.2k次,点赞26次,收藏23次。数据库作为一种系统化的数据存储、管理和检索的软件,已成为我们日常生活和工作中不可或缺的一部分,无论是电子商务网站、社交媒体平台,还是企业内部的各种信息系统,背后都有数据库的身影

正则化的作用以及L1和L2正则化的区别_l1l2正则化原理和区别-程序员宅基地

文章浏览阅读3.5w次,点赞103次,收藏505次。0 正则化的作用正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。常用的正则化方法有L1正则化和L2正则化。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。 L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归。但是使用正则化来防止过拟合的原理是什么?L1和L..._l1l2正则化原理和区别

【Win10】打开控制面板提示:操作系统当前的配置不能运行此应用程序-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏19次。win10系统,打开控制面板,提示 操作系统当前的配置不能运行此应用程序_操作系统当前的配置不能运行此应用程序

神经网络压缩 剪枝 量化 嵌入式计算优化NCNN mobilenet squeezenet shufflenet_基于数据压缩的mec网络中系统能效的优化方法-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏58次。性能提升方法本文github链接1. 小模型 mobilenet , 更精细模型的设计,紧致网络设计 mobilenet squeezenet shufflenet 123MobileNet逐通道卷积 + 普通点卷积 SqueezeNet 1∗1 和3∗3 卷积较少通道数量 ShuffleNet..._基于数据压缩的mec网络中系统能效的优化方法

高并发场景以及应对技巧-程序员宅基地

文章浏览阅读2.7k次。业务系统高并发(High Concurrency)限流: 鉴于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。分流:负载就是问题,高并发问题。均衡就是解决手段。削峰:对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,所以如何把瞬间的高流量变成一段时间平稳的流量也是设计秒杀系统很重要的思路。实现削峰的常用的方法有利用缓存和消息中间件等技术。异步处理:秒杀系统是一个高并发系统,采用异步处理模式可以极大地提高系统并_高并发场景

推荐文章

热门文章

相关标签