c语言
文章平均质量分 52
道_可
待到来年花开,依旧
展开
-
#define - C语言预处理指令
define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(definemacro)。3. 最后,再次对结果文件进行扫描,看看它是否包含任何由#defifine定义的符号。1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#defifine定义的符号。1. 宏参数和#defifine 定义中可以出现其他#defifine定义的变量。2. 当预处理器搜索#defifine定义的符号的时候,字符串常量的内容并不被搜索。对于宏,参数名被他们的值替换。原创 2023-06-25 00:00:45 · 82 阅读 · 0 评论 -
atoi函数
那么如果说出现空指针,出现空字符串,出现空白字符,出现正负号,或者出现非数字字符和溢出怎么办?简单版本:这样写有一些条件,那就是字符串只能是数字字符,且不能为空。返回值:函数返回通过将输入字符转换为数字而产生的int值。头文件:<stdlib.h>定义:将字符串转换为整数。原创 2023-06-24 18:35:50 · 100 阅读 · 0 评论 -
C语言文件操作 - xmind思维导图
原创 2023-06-24 13:08:25 · 134 阅读 · 0 评论 -
gcc环境下如何生成可执行文件 -- 文件编译的过程
首先会执行预编译(预处理指令),比如说#define定义符号的替换,或者头文件(类似#include)的包含,以及删除掉注释。注:这里不是系统性的说明,只是大概说明如何生成可执行文件的操作流程,具体可以查看《程序员的自我修养》这本书籍。函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。预处理完成之后就停下来,预处理之后产生的结果都放在。的任何一种实现中,存在两个不同的环境。最后是合并段表,以及。原创 2023-06-23 21:49:38 · 548 阅读 · 0 评论 -
文件操作 - c语言
如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及 文件当前的位置等)。如果文件不存在,则首先创建该文件。其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件。文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。原创 2023-06-23 22:12:45 · 50 阅读 · 0 评论 -
动态内存管理函数 malloc/free/calloc/realloc - C语言
定义:分配内存块。头文件:注:这个函数向内存申请一块的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。如果参数size为0malloc的行为是标准是未定义的,取决于编译器。定义:回收/释放内存块头文件:原创 2023-06-11 16:01:24 · 122 阅读 · 1 评论 -
C语言中的字符函数和字符串函数以及内存操作函数
求字符串长度。原创 2023-06-06 13:26:49 · 85 阅读 · 0 评论 -
结构体对齐-C语言
(解释一下这句话就是,s3 是嵌套的结构体,它内部最大的对齐数是 8,因为 d 的对齐数是 8,c 的对齐数是 1,i 的对齐数是 4,取其最大的对齐数,那么 s3 的对齐数就是 8,此时vs默认对齐数是8 ,两者取其较小值,所以 s3 这个变量最终被存储在偏移量为 8 字节整数倍的地址处)。c2 是 char 类型,为 1 个字节,默认对齐数是 8,取其较小值为 1,所以 c2 需要被存储到结构体变量对应偏移量为 1 字节整数倍的地址处,这里就直接向后存储就行,因为 9 是 1 的倍数。原创 2023-05-29 00:09:19 · 3491 阅读 · 3 评论 -
C语言-qsort函数排列数据以及模拟实现
注释:qsort函数实现了一个快速排序算法,对一个包含num个元素的数组进行排序,每个元素的宽度/字节。实参base是指向要排序的数组起始位置的指针。Qsort用已排序的元素覆盖此数组。参数compare是指向用户提供的例程的指针,用于比较两个数组元素并返回指定它们之间关系的值。注:这里之所以要自定义比较的函数,是因为使用者在进行数据比较的时候,比较的类型包括但不限于整型,浮点型,甚至是结构体类型的数据,使用者可以根据自己的需要,设计出具体比较不同类型的函数。2.2 qsort排序结构体类型。原创 2023-05-23 22:01:41 · 76 阅读 · 0 评论 -
c语言数组名百科全解
注:这里单位都是字节,4/8是因为在32位平台上是4个字节,在64位平台上是8字节。原创 2023-05-11 18:27:02 · 250 阅读 · 0 评论 -
函数指针/函数数组
在《c语言陷阱》中有两句代码可以增加下理解。原创 2023-05-03 23:05:23 · 22 阅读 · 0 评论 -
数组传参和指针传参
原创 2023-05-03 18:53:02 · 27 阅读 · 0 评论 -
指针数组 / 数组指针
以上仅供参考。原创 2023-05-03 00:18:50 · 21 阅读 · 0 评论 -
关于C语言读取字符的函数-scanf函数getchar函数/gets函数
当在键盘上输入字符/字符串后,输入的字符/字符串都会被缓冲区读取后放进缓冲区内储存,而之后我们调用scanf函数/getchar函数/gets函数操作时都需要在缓冲区内取出之前存入的字符/字符串。这里的逻辑是,在while循环内,getchar函数读取变量ch,只要不读取失败,就会一直读取,然后putchar打印出来,读取失败则不进入while循环。gets函数可以读取字符/字符串,还可以把整数以字符串的形式读取,另外空格后的数据也可以被gets函数读取。读取一个字符串,读取失败则返回NULL指针。原创 2023-05-01 13:36:39 · 2323 阅读 · 0 评论 -
求一组字符串长度(C语言)
返回字符串中的字符数。原创 2023-04-20 20:07:57 · 28 阅读 · 0 评论 -
冒泡排序-C语言实现
它重复地访问要排序的元素序列,依次比较两个相邻的元素,按照顺序进行交换,直到没有相邻元素需要交换,也就是说该元素序列已经排序完成。针对所有的元素重复以上的步骤,除了最后一个,也就是说如果有n个元素,那么就需要排列 n - 1 次。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的。如果第一个比第二个大,就交换他们两个。原创 2023-04-19 18:20:03 · 79 阅读 · 0 评论 -
条件操作符/三目运算符(C语言)
原创 2023-04-19 12:39:42 · 38 阅读 · 0 评论 -
C语言位操作符( >> << ~ & | ^ )
原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。另外,这次所了解到的操作符它们的操作数必须是整数。2. 算术移位 左边用原该值的符号位填充,右边丢弃。注意:对于移位操作符,不要移动负数位,这是标准未定义的。把所有二进制位中的数字,1变成0,0变成1。有0就为0,同为0就为0,同为1就为1。有1就为1,同为0就为0,同为1就为1。对应的二进制位,相同为0,相异为1。原创 2023-04-19 10:41:22 · 54 阅读 · 0 评论 -
在一个有序数组中,查找具体某个数字 - (二分查找)
是对有序数列进行查找,可以理解为通过判断中间数和被查找数的大小,不断地缩小边界,如果 中间数 < 被查找数,就说明被查找数在中间数的右侧,反之亦然。原创 2023-04-18 19:22:50 · 87 阅读 · 0 评论 -
关机小程序-C语言
在电脑Windows系统中,会提供关机的工具。-执行系统命令,这可以帮助我们通过c语言实现程序关机。,然后在电脑中找到当前文件的路径,点击Release。③出现的 .exe为后缀的文件就是我们需要的。这里复制到桌面,修改一下文件名称就可以了。代码如下:这里是通过。原创 2023-04-09 23:20:11 · 257 阅读 · 0 评论 -
隐式类型转换 - 整型提升
因为这里是 char 类型,据我们熟知的是 char 类型是一个字节,8个比特位,正常数据在内存中的存储是32个比特位,所以这里发生了截断,而此时如果需要拿到里面的数据的时候,需要进行整型提升,所以这里打印的是 -126。表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度,同时也是CPU的通用寄存器的长度。补:整数在内存中存储的形式是补码的形式,但是使用的时候是使用原码的形式;整形提升是按照变量的数据类型的符号位来提升的。原创 2023-04-09 13:35:57 · 49 阅读 · 0 评论 -
rand函数
rand函数在使用之前需要调用srand函数,srand函数生成伪随机数更建议使用time函数,time函数的参数一般置成空指针(NULL),返回类型需要强制转化成unsigned int,unsigned int 类型的time(NULL)就是srand需要的一直会。其中seed为unsigned int类型的变量,也被称作种子,传递的值为1。时间戳计算的是北京时间相较于计算机的起始时间之间的一个差值,将它换算成以秒为单位的一个数字,调用time函数的时间点与计算机起始之间的一个时间戳。原创 2023-03-29 14:11:25 · 286 阅读 · 1 评论 -
函数栈帧的创建与销毁
函数栈帧的创建与销毁的底层逻辑与原理原创 2023-04-02 23:15:22 · 40 阅读 · 0 评论 -
在 IDE vs2022 x86 Debug环境下,下面的程序会出现什么问题?运行结果是什么?为什么?
arr[12] == i ,12=12 恒成立进入循环,arr[12]= 0 也就是 i = 0,++变成1,1原创 2023-04-05 14:09:52 · 152 阅读 · 0 评论 -
strcpy函数
Char*在这里的作用是:当把源头数据拷贝过去的时候,我们期望目标空间发生变化,可能会使用目标空间的内容,所以需要返回的是目标空间的起始地址。const:变量和文件本身都有读写的权限,由const修饰时缩小变量的权限,让变量只能读不能写。写成循环的方式,判断条件是 *sour, \0 之前元素的ASCLL值不等于0,如果等于0,就说明访问到了\0,跳出循环。最后会发现只剩下一个\0没有传给*dest,最后再*dest = *sour;这应该是大部分人写出的代码,这里我们做一些简单的优化。原创 2023-04-06 20:55:15 · 962 阅读 · 0 评论