C语言程序设计进阶
文章平均质量分 83
Hungry_11
这个作者很懒,什么都没留下…
展开
-
预处理详解
C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。//1.预定义符号__FILE__ //进⾏编译的源⽂件地址__LINE__ //语句当前的行号__DATE__ //⽂件被编译的日期__TIME__ //⽂件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义//但是__STDC__ 在VS中未定义的,VS不支持ANSI C,在Linux中才可以使用int main()//VS中STDC语法错误,但是这个却可以。原创 2024-08-17 13:02:22 · 650 阅读 · 0 评论 -
C语言文件操作
磁盘上的文件就是文件。例如电脑当中的C盘内放入的文件夹内的内容就是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。原创 2024-08-16 13:29:05 · 970 阅读 · 0 评论 -
动态内存管理与柔性数组
C99中,结构体中的最后一个元素允许是未知大小的数组,这就叫作柔性数组int i;int a[0];//柔性数组成员,也可以写int a[];结构体成员a数组,它的数组大小是没有确定的,将来如果需要可以大也可以小。有些编译器支持a[0]这种写法,有些编译器支持a[ ]这种写法,具体取决编译器。原创 2024-08-16 13:28:38 · 1138 阅读 · 0 评论 -
(自定义类型)枚举
枚举顾名思义就是一一列举。把可能的取值一一列举。比如我们现实生活中:一周的星期一到星期日是有限的7天,可以一一列举性性别有:男、女、保密,也可以一一列举月份有12个月,也可以一一列举三原色,也是可以意义列举enum Day//星期Mon,Tues,Wed,Thur,Fri,Sat,Sunenum Sex//性别MALE,FEMALE,SECRETenum Color//颜⾊RED,GREEN,BLUE以上定义的enum Dayenum Sex。原创 2024-08-15 19:17:40 · 343 阅读 · 1 评论 -
(自定义类型)联合体union(共用体)
实设计的很简单,用起来也方便,但是结构的设计中包含了所有礼品的各种属性,这样使得结构体的大小就会偏大,比较浪费内存。以同样的方法分析第二个联合体Un2的大小就是,最大对齐数是4,最大成员大小是14,所以最终的空间大小是16。的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。上述代码Un1中 c 的最大对齐数应该是他的成员类型的对齐数,就是1,默认是8,那么取1。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。说明我们赋值的44被修改了。原创 2024-08-15 19:16:34 · 788 阅读 · 0 评论 -
(自定义类型)结构体以及结构体的存储
可以在声明的同时直接创建变量,也可以声明以后再创建变量。原创 2024-05-23 13:18:11 · 908 阅读 · 0 评论 -
数据在内存中的存储,大小端,浮点数
超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,我们要怎样在内存中存放数据呢。按照乱序正序还是倒序呢?计算机只采取了两种方式,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储。数据的低位存在高地址称为大端字节序存储。数据的低位存在低地址称为小端字节序存储。如图正在写博客的这台电脑就是小端存储。因为位于低位的01存放在了低地址0x003EFD34。为什么会有大小端模式之分呢?原创 2024-04-28 18:12:04 · 879 阅读 · 0 评论 -
C语言内存函数及模拟实现
函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。这个函数在遇到’\0’ 的时候并不会停下来。如果source和destination有任何的重叠,复制的结果都是未定义的。for (i = 0;i < 10;从 str2 复制 n 个字符到 str1,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。原创 2024-04-28 16:32:33 · 540 阅读 · 1 评论 -
字符串函数及其模拟实现
函数介绍:字符串以’\0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包含’\0’)。参数指向的字符串必须要以’\0’ 结束。注意函数的返回值为size_t,是无符号的实现字符串拷贝,左参数是目标字符串的首地址,右参数是源字符串的首地址。源字符串必须以‘ \0 ’ 结束。strcpy会将源字符串的‘ \0 ’拷贝到目标空间中。目标空间足够大,以确保能存放源字符串。目标空间必须可变。如果目标空间不够大,那么就会造成非法写入,然后报错。原创 2024-04-27 18:51:12 · 934 阅读 · 1 评论 -
字符分类函数与字符转换函数
C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件是。上面的代码,我们将小写转大写,是-32完成的效果,有了转换函数,就可以直接使用tolower函数。通过返回值来说明是否是小写字母,如果是小写字母就返回非0的整数,如果不是小写字母,则返回0。代码演示:字符串中的小写字母转大写,其他字符不变。是能够判断参数部分的c是否是小写字母的。具体用法在Cplusplus中有介绍。使用库函数转换就是这样的。原创 2024-04-25 16:52:09 · 314 阅读 · 0 评论 -
二维数组传参的本质(指针数组和数组指针)
parr[0]等同于对parr首元素解引用, [ ] 的作用就相当于解引用(*)符号。原创 2023-09-30 17:05:40 · 88 阅读 · 0 评论 -
创建一个返回值为函数指针的函数
函数指针:指针存的是函数的地址Add或者&Add都是函数的地址,在调试中虽然两者的类型有差异,但是使用起来都一样上面代码定义函数指针变量,int为Add的返回值,(int, int)为Add的参数类型int main()return 0;上述代码中和 **int r = Add(3, 5);**效果一样,可以直接通过传地址进行函数调用。原创 2023-09-30 21:43:29 · 232 阅读 · 1 评论