自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 函数栈帧的创建与销毁

我们在写C语言代码的时候,经常会把一个独立的功能抽象为函数,所以C程序是以函数为基本单位的。那函数是如何调用的?函数的返回值又是如何待会的?函数参数是如何传递的?这些问题都和函数栈帧 有关系。函数栈帧()就是函数调用过程中在程序的调用栈(call stack)所开辟的空间,这些空间 是用来存放:1.函数参数和函数返回值2.临时变量(包括函数的非静态的局部变量以及编译器自动生产的其他临时变量)3.保存上下文信息(包括在函数调用前后需要保持不变的寄存器2.理解函数栈帧能解决什么问题?

2024-07-29 21:20:17 729

原创 链表的分类之双向链表专题

链表的结构非常多,以下情况组合起来就有8种(2*2*2)链表结构:带头:指的是链表中有哨兵位节点该哨兵位节点即是头节点在前面实现链表中,口头上提到的头节点实际上指的是第一个有效节点,这,但是为了更好的理解才这样错误的称呼为头节点,实际在链表中,。单向链表只能从一个方向遍历,每一个节点就只有一个next指针而双向链表可以从两个方向去遍历,就是每个节点包含两个next指针,分别指向前和尾这个循环和不循环链表我们从字面就可以理解。我们一开始学的就是不带头单向不循环链表简称单链表。

2024-07-24 20:16:52 333

原创 单链表专题之单链表的实现

本篇讲的是如何进行链表的实现,不同功能之间细致的讲解

2024-07-18 21:25:34 246

原创 单链表专题

上节我们吧顺序表总结完毕,这节我们再来讲一下链表。相对于顺序表来说,链表有什么优点:那我们想来说一下顺序表的缺点:1.中间/头部位置的插入删除,需要挪动数据会导致程序效率低下。2.增容会导致降低程序的运行效率3.存在着一定的空间浪费所以我们选择在使用链表来避免这样的缺点。

2024-07-16 18:47:23 422

原创 顺序表的应用之通讯录专题

思考2】如何保证程序结束后,历史通讯录信息不会丢失。能够保存用户信息:名字、性别、年龄、电话、地址等。【思考1】用静态顺序表和动态顺序表分别如何实现。结构体,动态内存管理,顺序表,文件操作。下面的两传代码包括讲解与实现细节多多。至少能够存储100个人的通讯信息。

2024-07-11 20:08:02 176

原创 关于顺序表头插与尾插的代码以及分析

【代码】关于顺序表头插与尾插的代码以及分析。

2024-07-07 21:37:18 106

原创 数据结构之顺序表专题

数据结构是由。

2024-07-05 19:48:51 1027

原创 预处理详解

许多C的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程。例如:当我们根据同一个源文件要编译出一个程序的不同版本的时候,这个特性有点用处。(假定某个程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一个机器内存大些,我们需要一个数组能够大些。for(i = 0;//linux环境演示。

2024-07-04 21:12:16 663

原创 预处理详解

C语言设置了一些预定义符号可以直接使用,预定义符号也是在预处理期间处理的。__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义return 0;我们可以根据 ,这些预定义符号的说明来理解他们的作用。我们创建的test.c文件他的源文件文件当前的行号和文件被编译的日期和时间都被打印出来了。

2024-07-03 19:13:43 773

原创 编译和链接

test.c - 源文件test.h - 头文件代码都是文本信息电脑不能直接执行C语言代码,他能执行的是二进制的指令,而我们要把从语言代码转化成二进制指令需要用到的就是编译器。在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令(二进制指令)。类似于我们的翻译官,而我们就是计算机第2种是执行环境,它用于实际执行代码。 那翻译环境是怎么将源代码转换为可执行的机器指令的呢?这里我们就得展开开讲解一下翻译环境所故的事情。其实翻译环境是由编译和链接两个大

2024-07-03 01:04:55 589

原创 c语言之文件操作

在C语言中,文件通常指的是存储在计算机存储设备上的数据集合。这些数据可以是文本、二进制数据或其他格式。C语言提供了标准库函数来处理文件,如打开、读取、写入和关闭文件。文件操作是通过文件指针来完成的,文件指针指向文件的当前位置。使用文件操作函数,如等,可以实现对文件的读写操作。磁盘(硬盘)上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。

2024-05-28 23:33:16 721

原创 1.柔性数组

C/C++程序内存分配的几个区域:1.栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。《函数栈帧的创建和销毁》堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由0S回收。分配方式类似于链表。数据段(静态区):(static)存放全局变量、静态数据。

2024-05-14 23:20:18 762

原创 动态内存管理

p所指向的空间就会还给操作系统,但是str指向的地址还是这个地址,只不过变成野指针了,如果p指向的那块空间,没有被占用就能打印出来,如果被占用的话就打印不出来。但是呢,这串代码打印出来就是10,其实这就是巧合,就是释放的空间刚好没有被覆盖掉。,就是h的地址,之后我们就会把这个地址赋给str,但是呢,p是getmemory函数里面的局部变量,你如果一出。,这个数组里面的元素是hello world,最后返回数组名,我们知道数组名是首元素的地址,也就是。下面我在给一个简单的代码,和上面的代码错误是一样的。

2024-05-11 22:46:47 1881 1

原创 动态内存管理

我们已经掌握的内存开辟方式有:但是上述的开辟空间的方式有两个特点:空间开辟的大小是固定的。数组在申明的时候,必须指定数组的长度,数组空间一旦确定了大小不能调整。但是对于空间的要求,不仅仅是上述的情况,有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足。C语言引入了动态内存开辟,让程序员自己可以申请和释放空间,就比较灵活了。 malloc 函数是 C 语言标准库中的一个函数,用于动态分配内存。它在 <stdlib.h> 头文件中声明,用于在堆(heap

2024-05-07 23:25:30 1944 1

原创 自定义类型:联合体和枚举

当这个值被赋给联合体 un 的 c 成员时,它会覆盖 i 成员的最低有效字节。当这个整数值被赋给联合体 un 的 i 成员时,联合体的 c 成员也会受到影响,2.当最大成员不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。,所以它会存储 0x44 ,因为这是 i 的最低有效字节。乂,你看输出的地址都是一样的,这怎么说,就是符合这个联合体的特点。这里还是要注意一下,这里的说明很清晰是。给联合体其中一个成员赋值,其他的成员的值也跟着变化。

2024-05-04 17:55:31 1282 1

原创 自定义类型:结构体

位段是基于结构体的。位段的声明和结构是类似的,但是还是有1.位段的成员必须是int ,unsigned int或signed int,在c99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有一个冒号和一个数字。//位段的成员名后边有一个冒号和一个数字。int _b:5;int _c:10;int _d:30;在C语言中,位段(bit-field)是一种特殊的结构体成员它允许程序员指定结构体中成员所占用的位数。位段通常用于节省空间,

2024-05-03 21:34:59 1010 1

原创 自定义类型:结构体·

就是。

2024-05-02 23:52:56 37 1

原创 自定义类型:结构体

结构体(Struct)是一种自定义的数据类型,它允许将多个不同类型的变量组合在一起形成一个单一的类型。在编程中,结构体通常用于将相关的数据项组织在一起,以便于管理和操作。结构体的定义通常包括以下几个部分:这是结构体的标识符,用于在代码中引用该结构体。2. 成员变量:这些是结构体内部的变量,每个成员变量都有自己的类型和名称。int age;//分号不能丢在这个例子中,`Person` 是结构体的名称,它包含三个成员变量。

2024-05-01 22:25:41 914

原创 数据在内存中的存储

关于整数在内存中的存储我还有几个题没有给完,下面来一起看一下:补充一点%x是以和十六进制打印整数的。OK了现在习题就完了,这个题价值挺大的,我也是挺费劲的讲解出来。如果有什么不对的地方希望大家能够提出来。

2024-04-28 23:18:37 1008 1

原创 数据在内存中的存储

大端(Big-Endian):最高有效字节(Most Significant Byte, MSB)存储在最低的内存地址上。也就是说,数据的高位字节先存储,低位字节后存储。这种存储方式在人类阅读习惯上比较直观,因为数字的高位通常更重要。小端(Little-Endian):最低有效字节(Least Significant Byte, LSB)存储在最低的内存地址上。也就是说,数据的低位字节先存储,高位字节后存储。这种存储方式在计算机内部处理时更为高效,因为CPU处理数据时通常是从低地址开始的。

2024-04-23 21:01:59 1103

原创 c语言内存函数

memcmp 会从第一个字节开始比较,发现前两个字节相同(都是 97 和 98),但在第三个字节上发现不同(99 vs 100)。如果返回 0,则两个字符串在指定的比较长度内是相等的。在比较字符串时, memcmp 会逐字节比较两个字符串的字节序列,直到遇到不同的字节或者达到指定的比较长度。在 ASCII 编码中,每个字符对应一个字节的数值,数值较小的字符在字典序上排在前面。它按照字节比较,从 str1 和 str2 的第一个字节开始,逐字节比较,

2024-04-19 23:52:06 801 2

原创 C语言内存函数

如果我想拷贝的一串数字在目标数字。

2024-04-18 14:01:17 805 3

原创 字符串函数

strtok 函数是一个标准库函数,用于在C语言中对字符串进行分隔。它将一个字符串分割成多个子字符串,这些子字符串由指定的分隔符分隔。 strtok 函数会修改原始字符串,因此在使用它之前,通常需要复制原始字符串。接下来我们来看一下函数原型: str 是要分割的字符串。sep 是用于分隔字符串的分隔符集合。 strtok 函数的工作原理是这样的: 1.sep参数指向一个字符串,定义了用作分隔符的字符集合2.第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或

2024-04-16 23:17:55 545 1

原创 字符函数与字符串函数

由于 "Hello" 在两个字符串中都是相同的,所以函数会返回 0,表示两个字符串的前 5 个字符相同。strncmp 函数是 C 语言标准库中的一个函数,用于比较两个字符串的前 n 个字符。在C语言中, strncpy 函数是一个标准库函数,用于将一个字符串(源字符串)复制到另一个字符串(目标字符串)中。是 C 语言标准库中的一个函数,用于将一个字符串追加到另一个字符串的末尾。这个函数的原型定义在。执行后,dest的内容为"Hello",后面跟着4个空字符,以确保它是一个正确的C字符串。

2024-04-14 13:57:26 843 1

原创 字符函数和字符串函数

终于把指针搞完了下面就是字符函数和字符串函数的讲解了,准备好。

2024-04-09 23:16:27 2244 1

原创 深入理解指针(6)

我们可以看一下这串代码,在case1234中你不断地在调用前面的函数,而且很多都是重复的代码是不是感觉很麻烦,不简明,所以我们利用今天所学来解决一下。我们学了整型数组,字符数组,指针数组,我们还学过整型指针,字符指针,函数指针,数组指针而今天我们要学。上面的解释只是讲了个调用的大概,关于精确的函数比较和交换的解释,在上述的代码中就可以找到。,用于指针访问结构体中的成员。在进行这节的讲解,还会用到上述的代码,但是呢,我们要对最原始的代码,使用。,我们如果想把它改造成能够排序任意类型的函数,就是下面的样子。

2024-04-05 12:36:36 1114 1

原创 深入理解指针(5)

二维数组传参,形参部分可以写成数组,也可以写成指针。刚才回头看了一遍课,发现了一个挺本质的东西:arr+i产生的是下标为i元素的地址: arr是起始地址,+i就是跳过i个元素,产生的还是地址。arr只是提供的的起始地址,而i就是偏移量,[i]就相当于解引用,就是这样才能找到arr里面的元素。所以说这两个东西本质上是一样的。

2024-04-01 23:03:14 796

原创 深入理解指针(4)

这些就是今天的总结与归纳,还是那句话:还请兄弟们多多提问题,我才会更加进步,写的更加严谨。

2024-03-30 11:15:35 930 2

原创 深入理解指针(3)

我们知道创建一个变量的话,他们的地址都是随机的,但是呢,变量在销毁之前只要知道这个地址,那么这个变量就是可以访问的。首先我们知道打印出来的地址是16进制的数,他们相差28,要把28转化成10进制的数就是40,这才是它们之间的地址真实差值,28只是在16进制是28并不是正儿八经的数差。,这里的数组名表示的是整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址是有区别的)。,sizeof中单独放数组名,这里的数组名表示的是整个数组,计算的是整个数组的大小,单位是字节,

2024-03-28 23:42:13 950

原创 深入理解指针(2)

能,n的的地址是0x0012ff40带回main函数把他存到p这个指针变量里面去这是p里面存的地址就是n的地址,但是n在完成之后出了这个函数就会销毁这时n的地址也就销毁了。有的,就是我们刚说的指针 - 指针还是arr这个数组里面的内容是a b c d e f \0如果我们知道a的地址还知道\0的地址用这两个相减不就是这个中间的字符个数嘛。我们在上篇已经说过这里就不再详细的进行说明,这里只说一个重要的点,当指针进行+-整数的时候,它所访问的空间就会跳过,指针类型所对应的字节乘以整数个字节。

2024-03-27 23:02:36 1185

原创 深入理解指针(1)

在深入理解指针之前我们要先搞明白什么是指针。所谓指针就是“地址”那什么是地址呢?地址就是“内存单元的编号”?那怎么理解内存单元编号.这里引用鹏哥的例子容易理解 :有一栋宿舍楼,那么这栋宿舍就是内存 而这栋宿舍楼中的每一个房间就是一个个的单元,但是光有房子还不行查找起来非常麻烦,所以还要给房间编上号码,这样就形成了这栋楼的房间单元编号,而这就是“内存单元编号” 也就是“地址”,地址的名字就是“指针”。so,内存单元编号 =地址 = 指针。但是这里的指针不是我们口头上的指针,

2024-03-27 00:01:25 690

原创 重拾c语言

作为一个大一下学期的学生,c在上学期就学过去了,作为认知缺陷的自己在上学期浑浑噩噩,不知道规划,不认同c,期间也打算学c的课程,但也不了了之了。一是大学嘛水课很正常。1:每天学的课程受益匪浅的话或者是努力很久恍然大悟的知识一定要搞一篇学习心得包括学习的知识框架 具体内容 实操代码作为课题发布在博客上。这就是要努力的方向,让CSDN见证我的成长,希望功夫不负有心人期待四年之后的成果,共同加油!重拾C语言,初入CSDN想从一个好的阶段开始,写下开篇。在有了能力的基础上尽量去参加比赛,去发展个人。

2024-03-25 23:12:36 215

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除