![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C基础
文章平均质量分 68
愈努力俞幸运
这个作者很懒,什么都没留下…
展开
-
程序的环境和预处理#define #ifdefine
FILE代码所在文件的路径+名称LINE文件当前的行号DATE符号可以是整数,字符串等等这样写for的循环体内容就是 空语句不要加分号写宏的时候不要吝啬括号,宏的参数不是计算好之后传进去,而不是算好之后替换进去把include的文件内容放过来,把文件的内容复制过来自己创建的头文件,自定义的头文件。原创 2024-05-10 21:59:25 · 655 阅读 · 0 评论 -
文件操作 文件指针 fputc fgetc fputs fgets fprintf fscanf sscanf sprintf fwrite fread 通讯录文件版EOF ftell rewind
文本文件:打开人能看懂的就是文本文件二进制文件:打开人看不懂的就是二进制文件可打开二进制文件。原创 2024-04-22 22:21:59 · 364 阅读 · 0 评论 -
动态内存管理 柔性数组
我们有一种方式就是把内存的数据放到高速缓存里,高速缓存放到寄存器里 ,当cpu每次处理数据的时候去寄存器里拿,效率就会快,寄存器找不到就去cache里找,cache里找不到就去内存里找,size要开辟的字节数,申请好空间后是把这段空间的起始地址给你,返回第一个字节的地址。p不在指向动态开辟出来的内存的起始位置会出问题,p不走到最后,走到一半也不行。这两种写法是一个意思,大小是位置的称为柔性数组成员,即数组的大小是可以调整的。内核空间:留给内核使用的一段空间,内核态,4G的内存留2G给操作系统用。原创 2024-04-17 22:30:58 · 655 阅读 · 0 评论 -
结构体内存对齐 offsetof 枚举 联合体
对于数组算对齐数的时候,算的是元素的对齐数【第二条中的其它成员变量如果是数组,那么该成员变量的大小是看数组的类型,而不是数组类型*数组元素的个数】第2条中, gcc编译器没有默认的对齐数,那对齐数就是该成员的大小。第4条最大对齐数(即所有对齐数中最大的那个),嵌套结构体的对齐数。嵌套结构体对齐到自己最大对齐数的整数倍处。第一条是指比如整型只能在4的倍数处取,这只是假设方便理解。嵌套结构体占几个字节,按照结构体结构体对齐规则算就好喽。因为共用同一块空间用c的时候就不能用i,是嵌套的结构体最大的对齐数。原创 2024-03-23 22:37:33 · 454 阅读 · 0 评论 -
字符和字符串的库函数strcpy,strcat,strcmp,strncmp,strncat,strncmp,strtok,strstr,memcpy,memcmp.memset
在C语言中,size_t 是无符号整数类型,通常用于表示内存中对象的大小或索引。在不同系统中,size_t 的大小可能会有所不同,但它通常被设计为能够表示系统中最大可能的对象大小。dest所指向的位置,然后递增src和dest的指针位置,指向字符串的下一个字符。size_t是自己定义的一种类型,是已知类型的别名,具体要看头文件中是怎么定义的。字符’\0’: ASCII 码为0,表示一个字符串结束的标志。自己写的返回值为int,不严谨,要写成size_t。dest在src之后,从后往前,从前往后都没有关系。原创 2023-12-10 22:31:24 · 1075 阅读 · 0 评论 -
C语言指针进阶
把常量字符串赋给p,其实是把首字符的地址赋给了p,不是把字符串的地址赋给p,而是把首字符的地址赋给p,不是把字符串放到了p里面。&p得到char**二级指针,二级指针,指向地址,指向4/8个字节,这个系统的指针占4个字节,所以&p+1就向后移四个字节。找到str1的\0,然后把str2字符一个一个放过去,直到遇到\0停止,\0也放过去。pa是一个指针,指向一个数组,这个数组有5个元素,数组每个元素是char*函数指针,是指针,存放函数地址的指针。数组指针是指针,存放数组的地址,指向数组的指针。原创 2023-11-14 01:23:24 · 378 阅读 · 0 评论 -
杂记 define,typedef,static,extern,memset,ifndef,递归,逻辑与&&,整型提升,算术转换,栈区,高地址
避免头文件被引好多次 ,比如都引了#include,这个头文件有1000行,都引,那不就是好几千行,重复了当别人在包含add.h时都会先判断if没有定义它,第一次引add.h头文件时已经定义了,所以别人第二次在引用add.h,#endif前面的代码都不会执行。防止同一个头文件被重复引用多次。_ADD_H_一般都是根据头文件的名字写的。原创 2023-10-06 14:45:28 · 186 阅读 · 0 评论 -
vscode调试技巧 断言 assert
鼠标点击设置或取消断点设置好断点,点击开始调试(F5),代码就会在断点处停下来,断点前面的代码已经执行完了然后逐过程或逐语句调试上图中如果使用开始调试(F5),会一直走到这个断点上,F5走到下一个断点是逻辑上的(这是一个for循环),而不是物理上的。原创 2023-10-21 00:34:13 · 514 阅读 · 0 评论 -
字符串,字符数组,类型转换,sizeof,size_t,整数越界,浮点数,枚举,局部变量不要返回地址,
下一次的scanf从多出来的字符开始读,比如输入12345678则8就是下一个scanf就把8读进去。8个字节的数组,学数组的时候我们知道,传进去的是一个指针,不知道读入的内容的长度。printf double可以写%f是因为有自动类型转换。整数argc告诉后面argv字符数组到底有多少个字符串。const表示这个函数不修改字符串。原创 2023-10-03 01:17:29 · 382 阅读 · 0 评论 -
枚举,进制转换,char*,补码,算法,链表,位运算,NULL的含义,void*
如果想知道某一位是几,比如想知道第一位和第三位是几,可以与0101与,那么如果1和3位结果是1 就说1和3位原来是1,如果1和3位结果是0 就说1和3位原来是0。编码就是解决这个东西到底用哪个二进制表示。不够位数指的是比如32位,前面都补1。4个二进制位组合才能有16个状态。原创 2023-10-01 12:44:06 · 217 阅读 · 0 评论 -
C-结构体
定义一个新的数据类型,这个数据类型是struct Student,用这个数据类型定义了一个变量2 3不推荐。原创 2023-09-14 10:40:00 · 112 阅读 · 0 评论 -
指针,动态内存分配
指针就是地址,地址就是内存单元的编号指针变量,存放其他变量地址的变量 ,存放地址的变量第2句话,修改i的值也不影响p的值,可以看下面的例子,p放的是地址,p的地址修改了,不影响i,不是修改*p 执行swap_1时,第一步先为它里面的局部变量分配存储空间,第二步把实参的值发送给形参,这意味着i和a是不同的变量,当swap_1执行完毕后,swap_1中所有变量的空间全部被释放了 p,q,r都存放第一个字节的地址。那为什么存放第一个字节的地址,我们说r存放x的地址,r就指向x,但r又保存了第一个字节的地址原创 2023-09-13 23:46:47 · 429 阅读 · 0 评论 -
函数,变量作用域,extern
。原创 2023-09-12 00:01:49 · 141 阅读 · 0 评论 -
C语言数组
目录一维数组 多维数组是否存在原创 2023-09-10 23:52:10 · 133 阅读 · 0 评论 -
运算符,switch,强制类型转换,三目运算符,逗号表达式
除法的运算结果和运算对象的数据类型有关,两个都是int商就是int,被除数或者除数只要有一个是浮点型数据,商也是浮点型数据。原创 2023-09-10 23:25:35 · 301 阅读 · 0 评论 -
printf scanf
为什么要输出控制符,因为里面放的是二进制,必须控制输出的格式,指定这一串二进制以什么样的格式输出。把十的二进制代码放进去了,i对的是二进制代码,指定这一串0101代码以什么样的格式输出。凡是百分号开头的都是输出控制符,非输出控制符,比如刚刚的\n,空格等。输出控制符把它输出的参数以他规定的格式输出了,非输出控制符原样输出。输入必须是合法的,比如输入A,A不能转化成十进制。输入之间以逗号分隔 ,非输入控制符必须原样输入。输入之间以空格分隔 ,非输入控制符必须原样输入。想把值赋给谁,就取谁的地址。原创 2023-09-08 14:24:52 · 143 阅读 · 0 评论 -
C编程预备计算机专业知识
把基本类型拼在一起就变成了复合类型变量的本质就是内存中一段存储空间变量作用:给一段指定的内存空间起名,方便操作这段 内存。数据都是放在内存里的十进制就是逢十进一,二进制就是逢二进一二进制,逢二进一,如果加起来是2,则写0进1逢八进一,相加等于八,写0进一逢十六进一,相加等于十六,写0进一八进制的17对应十进制的15 ,为什么17对应十进制的15?17中的7没有进位,就是十进制的7,这个1是因为有8才能进一,这个1代表8,7+8=158进制23对应十进制几?原创 2023-09-08 09:50:01 · 211 阅读 · 0 评论