
C语言
文章平均质量分 75
二五战略第一步
山楂树の
Always believe that something wonderful is about to happen.
展开
-
C语言:结构体
结构体内存对齐规则:1. 第一个成员在与结构体变量偏移量为0的地址处。2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。(vscode没有编译器对齐数,对齐数就是成员自身大小)3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。原创 2023-11-19 23:51:04 · 740 阅读 · 4 评论 -
C语言:动态内存管理
为什么存在动态内存分配?原本的内存开辟方式有:int val = 20;在栈空间上开辟四个字节、char arr[10] = {0};在栈空间上开辟10个字节的连续空间。但是上述的开辟空间的方式有两个特点:1. 空间开辟大小是固定的。2. 数组在声明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了。 这时候就只能试试动态存开辟了。原创 2023-11-19 22:59:32 · 376 阅读 · 0 评论 -
C语言 字符函数汇总,模拟实现各字符函数(炒鸡详细)
strcmp:两个字符串比较相等。原型: int strcmp ( const char * str1, const char * str2 );比较是基于字符的 ASCII 值来进行的。strcmp() 会逐个比较两个字符串对应位置上的字符的 ASCII 值,并按照以下规则返回结果:当找到不同的字符时,根据其 ASCII 值的大小关系决定比较结果。较小的字符对应的字符串被认为是较小的。如果一个字符串是另一个字符串的前缀,则较短的字符串被认为是较小的。strcmp() 是区分大小写原创 2023-11-19 22:04:43 · 418 阅读 · 0 评论 -
C语言 深入理解指针
指针和数组:数组名本身就是数组第一个元素的地址。因此,指针和数组紧密相关,可以通过指针来遍历数组。此外,可以通过指针进行数组元素的动态分配和释放。指针和函数:函数参数可以是指针,通过指针参数,可以实现对函数外部变量的修改,或者动态传递数据。另外,可以通过指针返回动态分配的内存。指针和动态内存分配:通过指针,我们可以使用malloc()、calloc()和realloc()等函数在堆上动态分配内存。同时,需要负责及时释放动态分配的内存,以防止内存泄漏。原创 2023-11-19 19:25:12 · 152 阅读 · 0 评论 -
C语言:详解各操作数组的含义 arr、arr[0]、&arr、&arr+1、&arr[0] + 1、*arr、*(arr+1)等,彻底摆脱被数组指针支配的恐惧!
*和& 可以看做同时抵消,只剩a,那么就是整个数组的大小(&a-->int(*)[4],&a拿到的是数组名的地址,类型是int(*)[4],是一种数组指针,数组指针解引用找到的是数组,*&a-->a)a虽然是二维数组的地址,但是并没有单独放在sizeof内部,也没取地址,a表示首元素的地址,二维数组的首元素是它的第一行,a就是第一行的地址,+1跳过一行的数组,表示第二行的地址。&a取出是数组的地址,&a+1 跳过了整个数组的字节(16)所指向的地址,但同样是指针的大小,即4/8个字节,当前是64位,即8。原创 2023-11-09 22:17:33 · 6830 阅读 · 8 评论 -
C语言:深入浅出qsort方法,编写自己的qsort完成冒泡排序
qsort是 C 语言标准库中的一个函数,用于对数组进行快速排序,如下——base:指向需排序的数组指针(同数组首元素地址)。num:数组中的元素个数。size:每个元素的大小(以字节为单位)。compar:比较函数指针,用于定义排序顺序。原创 2023-11-08 17:24:58 · 151 阅读 · 0 评论 -
C语言 指针进阶
数组指针:数组名通常表示的都是数组首元素的地址,但是有2个例外:1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。2. &数组名,这里的数组名表示的依然是整个数组,所以&数组名取出的是整个数组的地址原创 2023-11-08 16:32:05 · 252 阅读 · 0 评论 -
C语言 指针
指针是内存中一个最小单元的编号,也就是地址,口语中说的指针,其实就是指针变量,指针变量就是用来存放指针地址的。我们可以通过&(取地址操作符)取出变量的内存起始地址,把地址可以存放到一个变量中,这个 变量就是指针变量。指针变量存储指针时(如0x11223344)在32位是4个字节,64位字节是8位字节。不同类型指针,访问权限不同指针类型决定了指针被解引用的时候访问几个字节,如果是int*的指针,解引用访问4个字节,如果是char*的指针,解引用访问1个字节,其他类型同理。不同类型指针,访问权限不同!原创 2023-11-02 22:41:22 · 206 阅读 · 1 评论 -
C语言 位操作符 >> << & | ^
二进制码 11111111111111111111111111110010 减去1后,最后一位数字0会变成1,并且往前找到第一个为1的数字,将它变成0,同时它后面所有的0都变成1,最终得到二进制码 11111111111111111111111111110001。这是因为减1的操作是对每一个位数进行判断,如果是1就变成0,如果是0就要向前面的位借位,借位的操作是将前一位(即更高位)的数字减1,借位操作会一直向高位进行,直到遇到第一个为1的数字才停止,并将其变成0。整数在内存中存储的是补码。原创 2023-10-28 21:43:04 · 293 阅读 · 1 评论 -
VsCode调试C/C++代码,如何查看指针内存地址
电脑每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,给内存单元进行了编号,这些编号被称为该内存单元的地址。那么调控程序时,我们又该如何查看变量的内存地址呢?原创 2023-10-12 16:49:24 · 7194 阅读 · 1 评论 -
VsCode同时编译多个C文件
VsCode默认只能编译单个C文件,想要编译调试多个文件,需要额外进行配置。参考如下两种方案原创 2023-10-11 21:37:34 · 2626 阅读 · 0 评论 -
C语言:转义字符
\ddd:d d d表示1~3个八进制的数字。如: \130 表示字符X,将8进制的130(130看做为8进制,8进制的数字为0~7)转换为10进制后,以得到的数字作为ASCII值所匹配的字符,换算如下原创 2023-10-08 23:01:39 · 190 阅读 · 0 评论 -
C语言:字符&字符串
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串;然而C语言中并没有字符串类型,那么,如何存储?字符串的结束标志默认是一个\0的转义字符,如果逐个指定各单个字符并不显示定义 \0,那么在读取时会直到找到\0字符才停止原创 2023-10-08 18:53:03 · 143 阅读 · 0 评论 -
C语言:常量
C语言中的常量分为以下以下几种:字面常量、const修饰的常变量:在c语言中,const修饰的a,本质是变量,但是不能直接修改,有常量的属性,也称为常变量、#define定义的标识符常量、枚举常量原创 2023-10-08 17:26:54 · 233 阅读 · 0 评论 -
【初识C语言】数据类型
char 字符数据类型short 短整型int 整形long 长整型longlong 更长的整形float 单精度浮点数double 双精度浮点数原创 2023-10-08 14:20:02 · 135 阅读 · 0 评论