
408学习笔记-C篇
文章平均质量分 69
408-C
云海听雷
这个作者很懒,什么都没留下…
展开
-
C++语法中的引用及其原理
引用是一个已存在的变量的别名(或称为“引用名”)。在 C++ 中,一旦定义了一个引用,它就与被引用的变量紧密绑定,对引用的操作实际上就是对被引用变量的操作。Type是数据类型,例如intfloat等。表示这是一个引用。是引用的名称。是已经声明的变量。int a = 10;// ref 是 a 的引用引用是 C++ 中一个非常重要的特性,它通过为变量提供一个别名,避免了不必要的拷贝操作,同时提供了与普通变量类似的使用方式。原创 2025-05-18 21:10:11 · 713 阅读 · 0 评论 -
结构体对齐三大法则
1、自然对齐规则:结构体的成员将按照自然对齐原则来排列。自然对齐要求每个成员的地址是其数据类型大小的整数倍。例如,一个 int类型的成员通常会被对齐到4字节边界(整除4),而一个 double 类型的成员通常会被对齐到8字节边界。2、填充字节:如果一个成员的大小不是对齐边界的整数倍编译器通常会在其后添加一些填充字节,以确保下一个成员能够正确对齐。填充字节的大小取决于编译器和目标平台,通常是1字节或更多。3、结构体的总大小:结构体的总大小通常等于其最大成员的大小的整数倍。原创 2025-05-18 19:57:47 · 607 阅读 · 0 评论 -
计算机单个进程内存布局的基本结构
这张图片展示了一个计算机内存布局的基本结构,从低地址。依次分布着不同的内存区域。原创 2025-05-18 18:58:34 · 203 阅读 · 0 评论 -
标准输出函数与占位符
printf(“占位符+文本内容”, 数据);为标准输出函数占位符根据自己的格式对数据进行输出。原创 2024-01-25 15:34:33 · 472 阅读 · 1 评论 -
scanf()与标准输入缓冲区
空白字符有空格、制表符、换行符等,当这几个占位符进行匹配时,若标准输入缓冲区的开头有一个或多个连续空白字符,则会将其全部清空,并从第一个非空白字符开始匹配。总结出的法则是:若占位符发生完全不匹配的情况,则不会读取数据(故预备传值的地址空间依然保持原值),并结束本占位符的匹配,开始下一个占位符的匹配,直到遇见成功匹配的占位符。因此,%c是最特殊的一个占位符,一个%c只会匹配一个字符,它会匹配成功并读取任何字符,除非标准输入缓冲区为空。轮到下一个占位符%c进行匹配,匹配成功,发生读取,原创 2024-01-25 23:18:57 · 1122 阅读 · 0 评论 -
1.三大基本数据类型(整型,浮点型,字符型)的常量、字面量
上面定义的PI是符号常量。#define预处理——编译——链接——运行用#define定义的字符常量的唯一作用是:在预处理过程中,编译器会用符号常量定义时对应的字面量,对程序中出现的所有符号常量进行文本替换。上面的代码在预处理时,程序中所有出现的文本PI。#define是一种宏定义,它在预处理阶段将标识符替换为相应的文本。当使用#define。原创 2024-01-17 22:37:23 · 1222 阅读 · 0 评论 -
C语言程序从编写到运行的过程
在这些步骤中,编译器(gcc在这里作为例子)是一个集成了预处理、编译、汇编功能的工具,可以通过不同的参数实现这些阶段。链接器(通常是一个称为ld的程序)将目标文件与可能需要的其他目标文件(例如库文件)合并成一个可执行文件。在这个阶段,预处理器(通常是一个称为cpp的程序)将源代码中的预处理指令进行处理。编译器(通常是一个称为cc1的程序)将预处理后的文件翻译成汇编代码。汇编器(通常是一个称为as的程序)将汇编代码转换为机器代码,生成目标文件(通常是二进制文件,扩展名为.o)。原创 2024-01-18 09:38:29 · 984 阅读 · 1 评论 -
数据类型的量级
数据类型的量级就是指数据类型的精度,也就是指用数据类型定义的数据在内存中所占用的内存空间大小。系统中是这样,不同的系统,不同的系统位数的量级是不一样的。1、并不是所占空间越大,量级就越大。2、以上的排序只是在。64位Windows。5、C语言中浮点类型。原创 2024-03-03 21:47:33 · 667 阅读 · 0 评论 -
数组名的探究
数组名其实是个很玄的东西,从本文对数组名的探究也可验证,在C语言中虽然没有对象,但是我们定义的变量是具有对象的结构的,即一个变量不止是代表了这个变量的值,还有其他诸多属性。然而这里要说的是:数组变量的内部还隐含了一个指向首个一阶元素的常量指针,这个指针的量级为首个一阶元素的类型,并且数组变量名的实际值就是这个指针的值。同时注意:地址与指针的区别,当一片内存空间未被使用,则它的标识叫地址,当它被使用了,则它的标识叫指针。我们可以得到这个变量在内存中的指针,且这个指针的量级为。的值相同,但量级不同,原创 2024-01-29 19:00:48 · 370 阅读 · 0 评论 -
不同规格数据类型间的转化
发生混合运算时,运算式中的所有数据类型都会先转化为相同的数据类型,并且都转化为运算式中最大规格的数据类型,再发生运算。,则运算式中所有的数据类型转化为运算式中最大规格的数据类型。以上数据类型规格从左到右依次增大。若运算中存在数据类型的规格≥。的混合运算,则全都转化为。原创 2024-01-20 11:08:13 · 161 阅读 · 0 评论 -
C语言中数据类型的规格与截断、补长
C语言中浮点类型float和double是不具有unsigned和signed格式的。发生混合运算时,运算式中的所有数据类型都会先转化为相同的数据类型,并且都转化为运算式中最大规格的数据类型,再发生运算。规格小于int的数据类型charshort,是不具有运算能力的,故而这两个数据类型在发生运算时:若参与运算的情况为:只有char、只有shortchar和short的混合运算,则运算式中的数据类型全都转化为int。原创 2024-01-24 20:47:51 · 980 阅读 · 2 评论 -
C语言中字符串函数的详细讲解
C语言提供了丰富的字符串处理函数,这些函数在<string.h>头文件中声明。原创 2025-05-17 19:16:41 · 808 阅读 · 0 评论 -
C语言查漏补缺
因为字符串中有6个字符,即末尾还有个结束符,但是数组容量为5,所以仅接纳5个字符,末尾的结束符不会被接纳,故而这样的字符数组在直接输出时可能会发生乱码,因为没有结束符。1、数组初始化时,例如。原创 2025-05-17 18:32:03 · 256 阅读 · 0 评论 -
数组名既可作为指针也可作为变量名
数组名可以作为指向首个元素的指针,是因为C语言的设计使得数组名在大多数上下文中会被自动解释为指向其第一个元素的指针。这种设计的目的是为了方便数组的操作,特别是通过指针来访问数组元素。而数组名可以代表整个数组,主要是因为存在像sizeof操作符这样需要对整个数组进行操作的场景,以及在数组初始化、作为函数参数(从声明形式上看)等场景中,需要明确数组的整体概念。正是C语言的语法和语义设计使得数组名在不同场景下有这两种不同的表现。原创 2025-05-17 17:37:06 · 927 阅读 · 0 评论 -
逻辑运算符的优先级以及短路运算
不同的编程语言可能会有细微的差别,但大多数遵循这样的优先级规则。这种优先级顺序类似于算术运算符中的乘除优先于加减,它帮助我们确定逻辑表达式中各个运算的执行顺序。原创 2025-05-15 14:42:56 · 349 阅读 · 0 评论 -
sizeof()运算符
在C语言中,sizeof是一个非常重要的运算符,用于计算类型的大小,返回值为该类型所占用的字节数。以下是对sizeof。原创 2025-05-15 14:22:24 · 248 阅读 · 0 评论 -
浮点数格式控制输出
指定输出浮点数的总长度为 8,包括小数点和可能的负号(如果有)。但实际输出时,如果数值本身的长度(包括小数部分)超过指定的总长度,系统会根据需要自动调整显示,可能不会严格限制在 8 个字符以内。这是因为 C 语言中格式说明符的总长度控制主要是用于对齐和预留显示空间,而不会截断数值本身的内容。代表总长度(包括小数点、可能的负号等),小数位数则根据数值自动确定。在 C 语言中,若仅控制浮点数的总长度而不控制保留小数位,可以通过。这种方法非常适合在不需要固定总宽度,但需要固定小数位数的场景中使用。原创 2025-05-15 14:06:28 · 169 阅读 · 0 评论 -
占位符读取标准输入缓冲区规则
格式化字符串中的空白字符会导致scanf跳过输入中的任意数量的空白字符。这种行为允许在格式化字符串中灵活处理输入中的空白字符,而不会影响数据的读取。但在某些情况下,可能会导致意外行为,例如在需要精确匹配输入格式时,需特别注意空白字符的处理。其实就是格式化字符串中的空白字符具有跳过标准输入缓冲区中空白字符的功能,就像%s、%d、%f跳过为首的空白字符群一样的的功能,所以这种格式化字符串里的空白字符一般都是和%c配合使用,也就是赋予%c跳过为首的空白字符群的能力。原创 2025-05-14 22:26:05 · 421 阅读 · 0 评论 -
408学习笔记-17-C-C/C++中程序内存区域划分
在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。——《函数栈帧的创建和销毁》:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。:存放函数体(类成员函数和全局函数)的二进制代码。:存放全局变量、静态数据。程序结束后由系统释放。原创 2024-03-22 22:11:08 · 482 阅读 · 0 评论 -
408学习笔记-16-C-动态内存管理
常规定义出来的变量,它们的大小都是已经规定好的,即在内存中开辟的内存空间都是固定的;且空间大小不可调整,可能会造成内存空间的浪费。于是C语言引入了动态内存开辟功能,让程序员自己可以申请和释放空间,就比较灵活了。原创 2024-03-22 20:38:35 · 1212 阅读 · 0 评论 -
408学习笔记-15-C-结构体
结构体是一种自定义类型。结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。原创 2024-03-18 18:42:51 · 623 阅读 · 0 评论 -
408学习笔记-14-C-数据在内存中的存储
整数型存储就是所有整型家族里的数据类型的存储方式,也就是说包含了字符类型的存储(因为字符的''操作符的返回值是ASCII码值,故实际上存储的是整数)。原创 2024-03-16 21:33:04 · 1255 阅读 · 1 评论 -
408学习笔记-13-C-C++语法中的引用和布尔类型
在以上cpp代码中,就是引用。我们知道,在C语言的语法中,叫做取地址符;但是在C++中,当出现在函数形参的定义中,且与形参紧挨着,则就叫做引用。在此时不要将&理解为取地址符,引用和取地址符是两个不一样的东西,他们有不同的功能。在以上代码形参变量p指明了p1是一个指针变量,int指明了p1所要指向的对象的数据类型为整型,而并不是对数据类型进行限制,而是作为标志标记p1。的作用是:让所标记的形参变量p1与作为实参的变量p产生数值上的动态关联,使得在子函数中修改所标记的形参变量p1。原创 2024-03-12 21:53:07 · 462 阅读 · 1 评论 -
408学习笔记-12-C-全局变量、局部变量、静态变量
全局变量就是声明在main()函数外的变量,作用范围是整个C工程(其实是从定义位置到程序末尾有效),也就是说同一个C工程中的其他.c文件均可调用。但是有个例外,static关键字修饰全局变量,会使它本地化,就不能被其他.c文件调用,作用仅限于当前.c文件。原创 2024-03-11 19:02:14 · 452 阅读 · 1 评论 -
408学习笔记-11-C-字符函数和字符串函数
用于计算字符串长度(除了末尾的'\0'。字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0'注意:1、参数指向的字符串必须要以'\0'结束。2、注意函数的返回值为sizt_t,是无符号整型。3、strlen的使用需要包含头文件。原创 2024-03-09 16:00:12 · 688 阅读 · 1 评论 -
408学习笔记-10-C-指针(4)
指向函数栈帧的指针变量。原创 2024-03-06 22:14:23 · 437 阅读 · 0 评论 -
408学习笔记-2-C-分支语句和循环语句
逻辑运算符的参与者分别是:0、非0整数。结果是:0、1。原创 2024-02-02 19:46:38 · 449 阅读 · 0 评论 -
408学习笔记-3-C-数组
的作用是指跳过本次循环中剩下的代码,而不是笼统的跳过本次循环。,并没有进入下一个循环,而是导致死循环的情况。原创 2024-02-03 16:54:31 · 415 阅读 · 1 评论 -
408学习笔记-5-C-栈区内存的空间分配方式
注意,这里要与大小端存储区分开,大小端存储决定的是单个数据内部字节的排列顺序 ,大端是字节由低地址向高地址排列,小端是字节由高地址向低地址排列,排序单位是单个字节。而栈区内存分配次序的操作单位是单个数据,也就是在栈区中,数据的排列顺序统一都是按照数据的定义次序从高地址向低地址排列。2、但是,像数组,结构体这样的复合数据类型,内部的数据随着下标的增长,地址是由低到高变化的。栈区内存的空间分配方式,默认先使用高地址处的空间,再去使用低地址处的空间。3、因此如图,数组在发生访问越界时,其实就是在。原创 2024-02-06 17:45:29 · 379 阅读 · 0 评论 -
408学习笔记-9-C-指针(3)
访问字符串时是访问的处于栈区的字符串的拷贝件,栈区的数据是可以修改的,故而此种方法对字符串不仅能做到读取,也能做到修改,还需要多注意一点的是,这种方法在静态区依然存放着字符串的原件,只是没有使用而已。访问字符串时是访问的处于静态区的字符串原件,静态区里的数据是不能修改的,故而此种方法只能做到对字符串的读取,而不能修改,所以以这种方式定义字符指针时,最好将其定义为常量指针;的一份拷贝),并将这份拷贝放入栈区刚开辟的空间中(其实就是从数组的首元素地址开始铺设所拷贝的数据)。结束之间的字符串内容进行拷贝,包含。原创 2024-03-06 15:48:18 · 496 阅读 · 0 评论 -
408学习笔记-4-C-函数
2、数组传参后,在函数中对数组的操作其实是对原数组的操作,并不会像1中说的那样再创建一个相同的数组。这是因为数组传参时传给函数的是指针。函数内对数组的操作都是基于指针的操作。1、函数中的形参只有在函数被调用时,也就是实参传入时,才会创建内存空间。且形参和实参虽然值相同,但所在的内存空间是不同的。原创 2024-02-05 22:29:09 · 420 阅读 · 1 评论 -
408学习笔记-8-C-指针(2)
在研究数组名之前要明晰一个点:在C语言中虽然没有对象,但是我们定义的变量是具有对象的结构的,即一个变量不止单纯地存放一个值,还有其他诸多属性。通过&数组变量名5元素整型数组,所指向的数据类型的量级为4*5byte。(这里还可以看出,数组的数据类型取决于元素的数据类型与元素的个数:两个数组的元素的数据类型不同,数组的数据类型不同;两个数组的元素的数据类型相同,但元素个数不同,那么数组的数据类型也不同)可是,数组变量名的特点就在于,它内置了一个指向数组中int,所指向的数据类型量级为4byte。原创 2024-03-05 22:16:47 · 452 阅读 · 0 评论 -
408学习笔记-7-C-指针(1)
内存会被划分一个个的内存单元,每个内存单元的大小为1字节(8位),每个内存单元都有一个独一无二的地址值。未使用的内存空间的地址值叫;已使用的内存空间的地址值叫。变量的定义就是为这个变量开辟内存空间,初始化就是为这个内存空间赋值,变量在定义后,它所开辟的内存空间的地址值就成了指针。原创 2024-03-03 22:27:24 · 416 阅读 · 0 评论 -
408学习笔记-6-C-整型提升、截断、算数转换
C语言中的结构体可以类比Java这种面向对象程序语言中的类,可以将其形象地理解为一种模具。原创 2024-03-01 19:16:11 · 381 阅读 · 0 评论 -
408学习笔记-1-C-操作符/运算符
二进制左移m > n,其实质就是数学上的m/2^n并且向下取整。编程语言中进行移位运算的都是补码。原创 2024-01-27 12:50:15 · 384 阅读 · 1 评论