C语言知识点
文章平均质量分 87
对于C语言语法的介绍
玖剹
这个作者很懒,什么都没留下…
展开
-
排序大乱炖
直接插入排序,可以有很多种写法,写法也比较简单,在这里,我主要介绍一种和希尔排序十分相似的思想,方便后续讲解希尔排序在这里我们定义一个变量end,它用来记录下标,在这里我们认为[0,end]范围内的数组是有序的,然后将下标end+1所在的数组,与[0,end]范围内的数组比大小(所有排序讲解的均为升序),放在合适的位置。原创 2024-03-25 20:24:17 · 995 阅读 · 0 评论 -
预处理详解
C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ASIC C,其值为1,否则未定义//ASIC C gcc编译器是支持的,但是VS不支持#define reg register //为register这个关键字,创建一个更简短的名字//for循环判断部分什么都不写,表示恒成立,死循环。原创 2024-03-09 12:29:04 · 1249 阅读 · 0 评论 -
C语言:编译和链接
所以当我无法知道宏定义或者头文件是否包含正确的时候,可以查看预处理后的.i文件来确认,但比较遗憾的是,.i文件一般是作为临时文件的,最后会被系统直接删除,所以在文件夹中找不到,在VS这样的集成环境下是无法观察的,但在gcc下可以用命令观察到。比如:目标文件的格式elf,链接底层实现中的空间与地址分配,符号解析和重定位等,如果你有兴趣,可以看《程序的自我修养》⼀书来详细了解。将源代码程序被输入扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字面量、特殊字符等)。原创 2024-01-15 23:35:16 · 953 阅读 · 0 评论 -
C语言内存函数
函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果source和destination有任何的重叠,复制的结果都是未定义的。memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。memcpy函数的模拟实现:对于重叠的内存,交给memmove来处理。较从ptr1和ptr2指针指向的位置开始,向后的num个字节。三: memset 函数的使用。原创 2024-01-14 17:09:14 · 532 阅读 · 0 评论 -
文件操作详解
我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流 想象成流淌着字符的河。每个被使用的文件都在内存中开辟了⼀个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。原创 2024-01-14 15:34:45 · 1343 阅读 · 0 评论 -
动态内存管理
所以,如果我们把结构体的内存以及其成员要的内存⼀次性分配好了,并返回给用户⼀个结构体指针,用户做⼀次free就可以把所有的内存也给释放掉。当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找⼀个合适大小的连续空间来使用(同时也会把旧空间的数据拷贝到新空间里,同时释放旧空间,返回新空间地址)。有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时候内存,我们⼀定会对内存的大小做灵活的调整。分配方式类似于链表。但是对于空间的需求,不仅仅是上述的情况。原创 2024-01-13 22:16:55 · 887 阅读 · 0 评论 -
自定义类型:联合和枚举
上述的结构其实设计的很简单,用起来也方便,但是结构的设计中包含了所有礼品的各种属性,这样使得结构体的大小就会偏大,比较浪费内存。联合的成员是共用同⼀块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。在C语言中是可以的,但是在C++是行的,C++的类型检查比较严格。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。第一个代码的三个地址都是一样的,第二个代码的输出,是将第四个字节的内容修改为55.原创 2024-01-13 20:46:34 · 968 阅读 · 0 评论 -
自定义类型:结构体
跟结构相比,位段可以达到同样的效果,并且可以很好的节省空间,但是有跨平台的问题存在。4.4位段使用的注意事项位段的几个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位置处是没有地址的。内存中每个字节分配⼀个地址,一个字节内部的bit位是没有地址的。所以不能对位段的成员使用&操作符,这样就不能使用scanf直接给位段的成员输入值,只能是先入放在一个变量中,然后赋值给位段的成员。原创 2024-01-13 11:43:40 · 982 阅读 · 0 评论 -
C语言操作符详解与进制
目录一:操作符的分类二:二进制和进制转换2.1 2进制转10进制2.1.1 10进制转2进制数字2.2 2进制转8进制和16进制2.2.1 2进制转8进制2.2.2 2进制转16进制三: 原码、反码、补码四:移位操作符4.1左移操作符4.2 右移操作符五:位操作符:&、|、^、~六:单目操作符七:单目操作符八:下标访问[]、函数调用()8.1[ ] 下标引用操作符8.2函数调用操作符九:结构成员访问操作符9.1结构体9.1.1结构的声明9.1.2结构体变量的定义和初始化9.2结构成员访问操作符9.2.1结构原创 2024-01-12 22:00:38 · 1065 阅读 · 0 评论 -
数据在内存中的存储
整数的2进制表示方法有三种,即数据在内存中以二进制的形式储存。三种表示方法均有和两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最高位的⼀位是被当做符号位,剩余的都是数值位。对于上述所说的三种表示方法,只适用于讨论。对于无符号位的整数来说,最高位如果1,则表示2^31,不是表示负数,无符号整数代表的数均为正数。负整数的三种表示方法各不相同。:直接将数值按照正负数的形式翻译成二进制得到的就是原码。:将原码的符号位不变,其他位依次按位取反就可以得到反码。:反码+1就得到补码。原创 2024-01-12 11:15:01 · 803 阅读 · 0 评论 -
初步认识指针
在了解内存和地址之前,我们想有个生活中的案例:有了,如果你的朋友得到房间号,就可以快速的找房间,找到你。生活中,每个房间有了房间号,就能提⾼效率,能快速的找到房间。如果把上面的例子对照到计算中,又是怎么样呢?我们知道计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何高效的管理呢?其实也是把内存划分为⼀个个的内存单元,每个内存单元的大小取1个字节。计算机中。原创 2024-01-10 18:43:10 · 916 阅读 · 0 评论 -
C语言之函数递归
递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的方法,在C语言中,递归就是函数自己调用自己。写⼀个史上最简单的C语言递归代码:上述就是⼀个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式,不是为了解决问题,代码最终也会陷入死递归,导致。原创 2023-11-27 23:49:39 · 853 阅读 · 0 评论 -
字符函数和字符串函数
字符串的拷贝••源字符串必须以'\0'结束。•会将源字符串中的'\0'拷贝到目标空间。•目标空间必须足够大,以确保能存放源字符串。•目标空间必须可修改。•头文件<string.h>字符串比较••标准规定:◦第⼀个字符串大于第二个字符串,则返回大于0的数字◦第⼀个字符串等于第二个字符串,则返回0◦第⼀个字符串小于第二个字符串,则返回小于0的数字◦那么如何判断两个字符串?比较两个字符串中对应位置上字符ASCII码值的大小。原创 2023-11-27 21:34:58 · 897 阅读 · 2 评论 -
C语言知识之函数
所以如果函数定义放在调用之前也是可以的。8.2多个文件⼀般在企业中我们写代码时候,代码可能比较多,不会将所有的代码都放在⼀个文件中;我们往往会根据程序的功能,将代码拆分放在多个文件中。⼀般情况下,函数的声明、类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)文件中。如下:有了函数声明和函数定义的理解,我们写代码就更加便了。8.3static和externstatic和extern都是C语言中的关键字。原创 2023-11-27 16:56:55 · 998 阅读 · 3 评论 -
C语言之数组详介
从这个概念中我们就可以发现2个有价值的信息:•数组中存放的是1个或者多个数据,但是数组元素个数不能为0。•数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组一般较多见的是二维数组。维数组的创建和初始化⼀维数组创建的基本语法如下:常量值存放在数组的值被称为,数组在创建的时候可以指定。•type指定的是数组中存放数据的类型,可以是:charshortintfloat等,也可以自己定义的类型•arr_name。原创 2023-11-13 22:37:50 · 154 阅读 · 3 评论 -
do while和goto
goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用;循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的。这两种循环都是先判断,条件如果满足就进⼊循环,执行循环语句,如果不满足就跳。语句也不是一无是处,在多层循环的代码中,如果想快速跳出使用goto。达式为真,就会进行下⼀次,表达式为假,则不再继续循环。循环则是先直接进⼊循环体,执行循环语句,然后再执行。语句中循环体是至少执行⼀次的,这是。0,也是1位数,要统计位数的。原创 2023-10-27 15:51:27 · 83 阅读 · 1 评论 -
循环语句之for循环
for循环是三种循环中使用最多的,for首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式 3 ,调整循环变量,然后再去 表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继 续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。三:for循环的实践练习:在屏幕上打印1~10的值。原创 2023-10-27 15:36:26 · 2230 阅读 · 4 评论 -
循环结构之while循环
表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下⼀次判断。n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第二位3。要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4。还是老规矩,有事评论区哦,下一篇讲解for循环。这就是他们的区别,while语句是可以实现循环效果的。循环1和2两个步骤,在n变成0之前,就能到所有的位。输⼊⼀个正的整数,逆序打印这个整数的每⼀位。要想去掉n的最低位,找出倒数第⼆位,则使用。原创 2023-10-27 14:31:36 · 51 阅读 · 1 评论 -
选择语句之switch语句
但可以看出在vs中会直接报错,也许有的编译器可以编译成功,但还是有一点问题,如果输入day == 4,四小于六,为真,返回值是1,会按case1处理,在别的时候可能会出现bug。我们发现,7除以3本来余数是1,但是我们发现程序运行的结果多了一行“余数是2”的打印。在语法归类时,字符以ASCII码的形式储存,ASCII的值是整数,所以字符也属于整型家族。前面的代码中,如果我们去掉case语句中的break,会出现什么情况呢?结构,用于判断条件有多个结果的情况。语句的时候,这时候要不就不做处理,要不就得在。原创 2023-10-26 23:43:28 · 354 阅读 · 5 评论 -
C语言中的操作符
逻辑是:a++是后置的,所以是先使用a的值,再使的值加一,a的初始值是0,在C语言中表示假,在或逻辑中,都是假结果就是假,但之后所有的字母均大于0,所以后面的值就均计算。的结果是0,再拿0和 36比较,0原创 2023-10-26 22:46:29 · 55 阅读 · 1 评论 -
选择结构之if语句
C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果是不是0,则语句执行。只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。上述代码,初学者也许看不懂,没事,后续文章会有介绍,在这里是用来举例if可以单用。原创 2023-10-25 23:28:17 · 82 阅读 · 2 评论 -
scanf函数
当我们有了变量以后,我们需要给变量输入值就可以使用scanf函数,如果需要将变量的值输出在屏幕上的时候就可以用printf函数,看下面例子:图画演示:那接下来,我们就深一步地了解scanf函数吧。原创 2023-10-17 23:17:46 · 210 阅读 · 0 评论 -
C语言数据类型和变量1
一:数据类型的介绍其实我们编程是为了用计算机解决生活问题,例如:在商城如果要买书我们要知道书名,作者,出版社,定价,在定价中有像55一样的整数定价,还有55.5类似的小数定价。C语言提供了丰富的数据类型来描述生活中的各种数据。使用整数类型描述整数,使用字符类型描述字符......所谓的类型,就是相似的数据所拥有的共同特征,编译器只有知道了数据数据类型,才知道怎么操作数据。下面先介绍一下C语言中的内容,这篇文章内容主要探讨内置数据类型。原创 2023-10-12 23:02:05 · 109 阅读 · 1 评论 -
printf函数的介绍
printf()的作用是将参数文本输出到屏幕。它名字里面的f 代表format格式化),表示可以定制输出文本信息。上面命令会在屏幕上输出一行文字“Hello World”。printf() 不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符\n.如果文本内部也有换行,也是通过插入换行符来实现的。printf函数是库函数的一种,它是在标准库的头文件中stdio.h定义的。原创 2023-10-17 17:52:58 · 4172 阅读 · 1 评论 -
初学C语言1
为了不再重复实现常见的代码,让程序员提升开发效率,C语言标准规定了一组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。我们可以看到arr1字符数组在打印的时候,打印了a,b,c后打印了一些随机值,这就是因为arr1在末尾的地方没有\0字符作为结束标志,在打印的时候没有停止。(给大家说一下我做题犯的一个错误,算小小的提醒吧,define并不是C语言内容,是用来定义宏的预处理指令,是由编译器实现的。例如:在C语言的标准中,约定一组函数,规定它们的功能,参数,返回值。原创 2023-10-10 22:31:59 · 117 阅读 · 0 评论 -
C语言数据类型和变量2——操作符就比较有意思
在写代码时,一定会涉及到计算。C语言为了计算方便提供了一系列的操作符,其中有一组操作符叫:算数操作符。分别是:+ - * / %,这些操作符又称为双目操作符。(操作符又称为运算符)什么是双目操作符呢?eg:在3+5,3和5被称为操作数,而加号连接了两个操作符,所以被称为双目操作符。原创 2023-10-17 15:57:42 · 87 阅读 · 3 评论 -
初学C语言2
控制语句用于控制程序的执行流程,要实现程序的各种结构方式(C语言支持三种结构:顺序结构,选择结构,循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。一:是C语言风格的注释/*......*/,内部可以分行,注意使用这种注释方式的时候,不要忘记结束的*/,这种注释方法还有一个缺点:不能嵌套注释。这恰恰是转义字符的问题,\n是一个转义字符表示换行,我们可以简单的理解为\让n的意思发生转变,n本来是一个普通的字符,被\转义为换行的是意思。\b:退格键,光标回退一个字符,但是不会删除字符。原创 2023-10-12 12:15:27 · 83 阅读 · 0 评论 -
编译器的选择及使用
(集成开发环境用于提供开发环境的应用程序,一般包括代码编辑器,编译器,调试器和图形用户界面等工具,集成了代码编写功能,分析功能,编译功能,调试功能等一体化的开发软件服务套。c语言是一门编译型计算机语言,C语言源代码都是文本文件,文本文件本身是无法执行,必须通过编译器翻译和连接器的链接,生成二进制的可执行文件,可执行文件才能执行。常见的编译器:msvc,clang,gcc等,当然也有一些集成开发环境如:vs2022,XCode,CodeBlocks,DevC++,Clion等。1.为什么要使用编译器?原创 2023-10-10 14:37:09 · 156 阅读 · 1 评论