
C语言
文章平均质量分 75
C语言笔记
Sophia.C
这个作者很懒,什么都没留下…
展开
-
strlen和sizeof
停止,但这个数组除了a b c 三个元素外后面还有很大的空间,但这个空间里面有什么我们完全不知道,因此strlen求出的字符串长度是一个随机值。三个字符,strlen求这个字符串的长度,遇到。给了一个数组未指定大小,但初始化了,只放了。,因为只初始化三个元素,这称为。时,其结果与上述结果相同。但当我们指定数组的大小为。原创 2023-10-15 22:47:55 · 103 阅读 · 2 评论 -
认识转义字符和变量
t单独存在时,被编译器识别为转义字符-水平制表符如果要识别转义字符\t需要在其前面加一个同理可得,当遇到转义字符时,可以在其前面加\,使其可以输出其原本内容。原创 2023-11-15 02:58:25 · 107 阅读 · 0 评论 -
认识操作符
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。原创 2023-11-16 23:49:35 · 78 阅读 · 1 评论 -
认识printf和scanf
默认情况下,printf()不对正数显⽰ +号,只对负数显⽰号。如果想让正数也输出号,可以在占位符的后⾯加⼀个。%后面加-代表左对齐。原创 2023-11-18 18:05:44 · 589 阅读 · 3 评论 -
分支语句(if和switch语句)
else总是与它相邻的if匹配示例中,第一个if(a=3)不成立,第二个if(a=2)成立,这时我们可能会以为打印“xxx”,事实上,这个代码什么都不打印。因为else总是与它相邻的if匹配,第二个if与else匹配,嵌套在第一个if语句中,如果第一个if语句不成立,里面嵌套的if...else语句也不会被执行,所以什么也不打印。如果成立,在进去执行if...else语句这样写更简明易懂如果一个常量与变量比较相等,建议将变量放在前面如果我们不小心写成赋值符,代码会直接报错。原创 2023-11-19 23:35:07 · 100 阅读 · 1 评论 -
循环语句 学习笔记
•break的作⽤是⽤于永久的终⽌循环,只要break被执⾏,直接就会跳出循环,继续往后执⾏。•continue的作⽤是跳过本次循环continue后边的代码,在for循环和while循环中有所差异的。原创 2023-11-24 22:58:16 · 475 阅读 · 1 评论 -
C语言——解析数字游戏
这里我们发现,不论函数运行几次,其运行结果总是与第一次相同。这是为什么呢?原创 2023-12-05 23:06:41 · 613 阅读 · 1 评论 -
C语言--数组笔记
一.数组的概念一.数组的概念数组是⼀组相同类型元素的集合。•数组中存放的是1个或者多个数据,但是数组元素个数不能为0。•数组中存放的多个数据,类型是相同的。数组的元素都是内置类型的,如果我们把,这时候就是,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。二.一维数组2. 1⼀维数组的创建和初始化2.1.1数组创建⼀维数组创建的基本语法如下:存放在数组的值被称为,数组在创建的时候可以指定和类型。•type指定的是数组中,可以是:char。原创 2023-12-09 23:11:59 · 684 阅读 · 0 评论 -
C语言——多个字符从两端向中间汇聚和⼆分查找
设置两个数组,将要从两端向中间移动的字符串放入数组1中,数组2中放入与数组1等长的符号,找到数组元素的左右下标,使用while循环语句,用数组1中的左右元素替换数组2中的左右元素,然后左下标+1,右下标-1,循环往复,直至左下标>右下标,结束循环。strlen函数,包含的头文件:示例中strlen(arr1)-1是因为数组下标从0开始。Sleep函数,包含的头文件:windows.hsystem函数,包含的头文件:stdlib.hsystem("cls")可以调用cls系统命令,原创 2023-12-10 18:29:44 · 350 阅读 · 1 评论 -
C语言——函数
3.1在单个文件中,如果函数的定义放在函数的声明之后,进行编译时会发生错误,这是因为当函数开始运行,一行行向下扫描,当扫描到函数的调用时,发现函数未定义,这时只要先进行一下函数声明,就可以正常编译了。函数声明函数名,函数的返回类型和函数的参数。函数声明中参数只保留类型,省略掉名字也是可以的。在多个文件中,函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在源⽂件(.c)⽂件中。八.原创 2024-03-04 23:37:56 · 908 阅读 · 0 评论 -
C语言——扫雷游戏分析和设计
•使⽤控制台实现经典的扫雷游戏•游戏可以通过菜单实现继续玩或者退出游戏•扫雷的棋盘是 Row * Col 的格⼦•默认随机布置Num个雷•可以排查雷◦如果位置不是雷,就显⽰周围有⼏个雷◦如果位置是雷,就炸死游戏结束◦把除Num个雷之外的所有⾮雷都找出来,排雷成功,游戏结束2.游戏界面:初始界面游戏界面游戏失败界面。原创 2024-03-09 23:53:40 · 357 阅读 · 1 评论 -
C语言--函数递归和青蛙跳台阶问题
1.递归的思想:递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是。1.递归的思想:把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较⼩的⼦问题来求解;直到⼦问题不再被拆分,递归就结束了。所以递归的思考⽅式就是把⼤事化⼩的过程。递归中的递就是递推的意思,归就是回归的意思。2.递归的限制条件递归在书写的时候,有2个必要条件:•递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。•每次递归调⽤之后越来越接近这个限制条件。原创 2024-03-10 23:47:21 · 324 阅读 · 1 评论 -
C语言——关于scanf的各种问题
为什么图2输入的二维数组不都是1,打印的二维数组全为1?scanf。原创 2024-03-17 01:27:36 · 460 阅读 · 1 评论 -
C语言---操作符plus版
内存中存储的是二进制的补码内存中存储的是二进制的补码一. 操作符的分类•算术操作符:•移位操作符:>•位操作符:& | ^•赋值操作符:+=-=*=/=%==&=|=^=•单⽬操作符:!++--sizeof类型•关系操作符:>=原创 2024-03-17 23:28:31 · 688 阅读 · 1 评论 -
C语言——操作符的属性:优先性和结合性
常用运算符的优先级:1•圆括号(() ),使⽤它改变其他运算符的优先级2•⾃增运算符(++),⾃减运算符(--3•单⽬运算符(和4•乘法(),除法(5•加法(),减法(6•关系运算符(等)7•赋值运算符(原创 2024-03-23 16:22:15 · 1676 阅读 · 0 评论 -
C语言——指针
2.指针变量。原创 2024-03-26 23:26:10 · 1034 阅读 · 6 评论 -
C语言——用多种方法由易到难带你模拟计算器
我们通过函数指针数组将功能函数的地址都放在一个数组中,通过指针数组调用我们需要的功能函数,实现该函数功能,但是我们发现数组下标是从0开始的,我们输入0时代表游戏结束,所以我们将0放在指针数组的首元素中。我们发现功能函数的参数类型,个数和函数的返回类型都相同,但是在switch语句中,我们每实现一种功能函数,就需要写代码调用一次,未免太过冗余。时,被调⽤的函数就是回调函数。我们自定义一个test函数,将所需的功能函数的地址作为参数传递给test函数,调用该功能函数,输入两个数字实现该功能。原创 2024-04-03 21:16:55 · 455 阅读 · 1 评论 -
C语言——深入理解指针
实数组名就是数组⾸元素(第⼀个元素)的地址,但是有两个例外:•,sizeof中单独放数组名,这⾥的数组名表⽰,计算的是整个数组的⼤⼩,单位是字节•,这⾥的数组名表⽰整个数组,(整个数组的地址和数组⾸元素的地址是有区别的)。除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。原创 2024-04-03 21:17:02 · 1212 阅读 · 6 评论 -
C语言——姐带你一步步超详细用冒泡排序法模拟实现 qsort 函数
这里我们移将数组元素升序排列进行解释说明。第一组:从数组的首地址的元素开始,将首地址的元素和第二个地址的元素进行比较,如果首地址的元素大于第二个地址的元素,将首地址的元素和第二个地址的元素进行交换,反之不换;之后再将第二个地址的元素和第三个地址的元素进行比较,如果第二个地址的元素大于第三个地址的元素,将第二个地址的元素和第三个地址的元素进行交换,反之不换;以此类推,交换了n-1次后,数组的最大元素就放在了数组的最后。原创 2024-04-05 21:04:21 · 842 阅读 · 0 评论 -
C语言——关于指针运算的例题分析
1.sizeof(数组名),这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩。2.&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址。3.除此之外所有的数组名都表⽰⾸元素的地址。1.一维数组。原创 2024-04-06 23:13:14 · 275 阅读 · 0 评论 -
C语言——字符函数和字符串函数
头文件定义了宏assert(),⽤于在运⾏时确保程序符合指定条件,如果不符合,就报 错终⽌运⾏。这个宏常常被称为。assert() 宏接受⼀个表达式作为参数。如果该表达式为真(返回值⾮零), assert() 不会产⽣任何作⽤,程序继续运⾏。如果该表达式为假(返回值为零), assert() 就会报错,在标准错误流stderr 中写⼊⼀条错误信息,assert() 的使⽤对程序员是⾮常友好的,使⽤ assert() 有⼏个好处:它不仅,还有⼀种。如果已经确认程序没有问。原创 2024-04-18 00:42:45 · 1254 阅读 · 2 评论 -
C语言——内存函数的实现与模拟
与strcpy 函数类似1.头文件 2.基本格式•函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。•这个函数在遇到'\0'的时候并不会停下来。•如果source和destination有任何的重叠,复制的结果都是未定义的。模拟memcpy函数:(char*) dest强制转换是临时的,所以 *(char*) dest++中dest++时dest已经不是强制类型转换之后的char*类型了,可以写成。原创 2024-04-23 01:21:49 · 217 阅读 · 2 评论 -
C语言——数据在内存中的存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储。原创 2024-04-25 14:48:49 · 515 阅读 · 0 评论 -
C语言——结构体
C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要 名字、年龄、学号、⾝⾼、体重等;描述⼀本书需要作者、出版社、定价等。C语⾔为了解决这个问题,增加了结构体这种⾃定义的数据类型,让程序员可以⾃⼰创造适合的类型。结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:标量、数组、指针,甚⾄是其他结构体。原创 2024-04-28 15:59:39 · 981 阅读 · 1 评论 -
C语言——联合体和枚举
联合体和结构体类似。联合体类型的声明:联合体的特点:像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以是不同的类型。但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是。。给联合体其中⼀个成员赋值,其他成员的值也跟着变化。我们发现当改变un.c时un.i也跟着改变,改变un.i时un.c也跟着改变。所以对于联合体来说,同一时间我们只用一个成员,否则会发生冲突。结论:同一时间在多个成员中我们只需要用到一个成员时,可以将多个成员放入联合体中。原创 2024-05-08 01:21:22 · 421 阅读 · 1 评论 -
C语言——动态内存管理
C99 中,结构中的最后⼀个元素允许是未知⼤⼩的数组,这就叫做『柔性数组』成员。1. 结构体中最后一个成员。(结构中的柔性数组成员前⾯必须⾄少⼀个其他成员)2. 最后一个成员是数组,且数组没有指定大小。原创 2024-05-10 01:11:38 · 1148 阅读 · 6 评论 -
C语言——模拟实现库函数atoi
INT_MAX 和 INT_MIN 是 C语言 的两个预定义宏,代表了整型变量能够存储的最大正整数21474836472^31 − 1)和最小负整数-2^31这个值是相对于二进制补码表示的,也就是说,负数的范围比正数大 1,这两个宏在头文件中定义。原创 2024-05-13 21:57:53 · 591 阅读 · 7 评论 -
C语言 —— 编译和链接
1.翻译环境和运⾏环境1.翻译环境和运⾏环境在ANSI C的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。2.翻译环境那翻译环境是怎么将源代码转换为可执⾏的机器指令的呢?翻译环境是由编译和链接两个⼤的过程组成的,⽽编译⼜可以分解成:预处理(有些书也叫预编译)、编译、汇编三个过程。⼀个C语⾔的项⽬中可能有多个.c⽂件⼀起构建,那多个.c⽂件如何⽣成可执⾏程序呢?•。原创 2024-05-23 23:12:37 · 847 阅读 · 3 评论 -
C语言——预处理详解
C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。基本语法:name -- 宏名stuff -- 宏的替换文本当代码中出现name时,预处理器会将其替换为stuff#define reg register //为 register这个关键字,创建⼀个简短的名字;) //⽤更形象的符号来替换⼀种实现case //在写case语句的时候⾃动把 break写上。// 如果定义的 stuff过⻓,可以分成⼏⾏写,除了最后⼀⾏外,每⾏的后⾯都加⼀个反斜杠(续⾏符)。原创 2024-05-27 21:57:46 · 768 阅读 · 3 评论 -
C语言——文件操作
如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏,我们可以使⽤ ⽂件。磁盘(硬盘)上的⽂件是⽂件。在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类 的)。原创 2025-02-24 16:36:40 · 999 阅读 · 0 评论