《C语言内核深度解析》学习笔记之数组&字符串&结构体&共用体&枚举(第五章)

1.内存的管理方式

在C语言程序中,存放数据所能使用的内存空间分为4种情况:栈、堆、数据区和常量区

栈内存特点详解:1.空间实现自动管理:运行时空间自动分配,运行结束空间自动回收

                             2.能够被反复使用

                             3.脏内存

                             4.临时性

堆内存特点详解:1.灵活性:堆是另一种管理形式的内存区域,堆内存的管理灵活

                             2.内存量大:堆内存空间很大,进程可以按需手动申请,使用完手动释放。

                             3.程序手动申请和释放:malloc申请,free释放(malloc返回的是void* 类型的指针,无法确定malloc(0)返回何值,定义者规定)

                             4.脏内存

                             5.临时性

代码段(.text):代码段存放的是程序的代码部分,程序中的各种函数的指令就存放在该段

数据段(.data):也被称为数据区、静态数据区、静态区,存放显式初始化为非0的静态数据。

.bss段,又叫ZI段,所有未初始化的静态变量的空间开辟于此。

小结:栈、堆、静态这三种内存管理方式都可以为程序提供内存空间。栈空间用于开辟局部变量空间,实现的是自动内存管理;对于栈内存来说,程序需要malloc进行手动申请,使用完后必须使用free进行释放,实现的是手动内存管理,静态数据区的数据段,专门用于全局比那里和静态变量。

如果只是在函数内部临时使用,作用范围希望被局限在函数内部,就定义局部变量。

如果变量只是在程序的一个阶段期间有用,非常适合使用堆内存空间;如果变量需要在程序运行的整个过程中一直存在的话,适合使用全局变量。

2.C语言中的字符串类型

C语言使用指针来管理字符串  char *p="linux"

本质是:指向字符串的存放空间的指针,本质上与字符数组没有什么区别,只是使用了“\0”字符作为结尾符。

sizeof是C语言的一个关键字,使用方法为sizeof(类型或变量名),返回的是类型或者是变量所占用的字节数。用于测试不同平台下各类型所占用的字节数。

strlen是C语言一个库函数,这个函数接收一个字符串的指针,返回值为字符串的长度。且返回的字符串长度不包括“\0”

取个例子: char *p="linux"

sizeof(p)=4; 此时测试的是字符指针变量p本身的长度,与字符串的长度无关。

strlen(p)=5;计算字符串字符个数的(不包括"\0")

3.结构体概述

C语言中的两种类型:原生类型和自定义类型。结构体类型是一种自定义类型

结构体针对于数组具有定义时需明确具体大小,且不能更改以及要求所有元素类型必须一致,两个明显缺陷升级而来。

结构体对齐访问:用于配合硬件,虽然牺牲了内存空间,但是提高了访问效率。

#pragme pack(4)     //4字节对齐

结构体对齐实例

struct mystruct1
          {
              int a;           4    4
              char b;          1    1+1
              short c;         2    2
          };
struct stu
          {
              char sex;        1    4
              int length;      4    4
              char name[10];   10   12
          };

4.共用体

union


union mynuion
{
    int a;
    char b;
};

共同体中的各个成员其实是一体的,彼此不独立,使用同一个内存单元。

共同体用于那种对一个内存单元进行多种不同规则解析的情况下。

5.大小端模式

高字节对应低地址(大端模式)、高字节对应高地址(小端模式)

通信的大小端问题,先发低字节叫做小端,先发高字节叫做大端。

用union来测试机器的大小端模式

#include<stdio.h>

union mynuion
{
    int a;
    char b;
};

int is_little_endian(void)
{
   union myunion u1;
   u1.a = 1;
   return u1.b;
}
int main(void)
{
   int i = is_little_endian();
   if  (1 == i) 
   {
     printf("小端模式\n");
   }
   else
   {
     printf("大端模式\n");
   }
   return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
好的,我可以给你提供一个大概的思路和步骤,但具的实现还需要根据你的需求和具情况进行调整。 1. 定义数据类型和结构 首先,你需要定义数据库支持的数据类型,例如整型、浮点型、字符串等。然后,你需要设计一个结构来表示每个字段的属性,例如字段名、数据类型、长度等。 2. 创建数据存储结构 接下来,你需要创建一个数据存储结构,可以使用链表或二维数组来存储数据。如果数据比较简单,可以使用二维数组来存储,每一行代表一条记录,每一列代表一个字段。如果数据比较复杂,可以使用链表来存储,每个节点代表一条记录,节点中存储着该记录的各个字段的值。 3. 实现增删改查操作 接下来,你需要实现增删改查等操作。对于增加和修改操作,你需要先根据用户输入的字段名和值,判断该字段是否存在以及该值是否符合该字段的数据类型和长度要求。如果符合要求,就将该记录添加到数据存储结构中。对于删除和查询操作,你需要先根据用户输入的条件,找到符合条件的记录,然后进行删除或查询。 4. 实现用户界面 最后,你需要实现一个用户界面,通过界面让用户可以方便地进行操作。你可以使用字符串和位运算来实现用户界面,例如使用字符串来显示菜单选项和操作结果,使用位运算来处理用户输入的选项。 总之,这是一个比较复杂的项目,需要你熟悉并掌握多种知识点,才能够顺利完成。希望我的思路和步骤能够帮助到你。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值