- 博客(21)
- 收藏
- 关注

原创 C语言基础:野指针、空指针、空悬指针
在C语言中,悬空指针指的是指向已删除(或释放)的内存位置的指针。(NULL是空常量,它的值是0,这个NULL一般存放在内存0x0000 0000的位置,这个地址只能存NULL,不能被其他程序修改)很多情况下,我们不可避免的会遇到野指针,比如刚定义的指针无法立即为其分配一块恰当的内存,又或者指针指向的内存已经被释放了等等。void*:是指针类型,是指针类型的一种,可以匹配任意类型的指针,类似与通配符,又被叫做万能指针。void*是一个指针类型,但该指针的数据类型不明确,无法通过解引用获取内存中的数据,因为。
2025-01-09 12:55:14
3427
原创 C语言基础:指针(常量指针和指针常量)
常量:分为字面量和只读常量,字面量就是我们平时直接操作的量:printf("%d\n",12);只读常量使用关键字const修饰,凡是被这个关键字修饰的变量,一旦赋值,值就不能改变。定义:main函数有多种定义格式,main函数也是函数,函数相关的结论对我们main函数也有效(也可以定义main函数的函数指针)作用:p的指向不能被改变(地址不可更改),p指向的数据不能改变(地址对应的数据不可更改)定义:常量的指针,本质是一个指针,指针指向的数据不能改变。1. 常量指针的地址可以改变(指向是可以改变的)。
2025-01-06 19:21:26
1144
原创 C语言基础:指针(函数指针与指针函数与二级指针)
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。函数指针本质上是指针,它是函数的指针(定义了一个指针变量,变量中存储了函数的地址)。在函数中不要直接返回一个局部变量的地址,因为函数调用完毕后,局部变量会被回收,使得返回的地址就不明确,此时返回的指针就是野指针。
2024-12-31 12:42:59
1205
原创 C语言基础:指针(字符数组和字符指针)
字符指针在创建的时候,需要依赖于字符数组,字符指针在内存开辟的内存空间中,存放的是数组元素的地址。字符指针的创建依赖于字符数组,字符数组可以独立存在,而字符指针不能独立存在。//常量池,此时的赋值,将常量池中的数据读取出来,存入带栈中数组对应的位置。//错误,(可以理解为数组名就是一个常量,也就是一旦创建,就不能再改变)字符数组由元素组成,每个元素中存放一个字符,而字符指针变量中存放的是地址,也能作为函数参数。对于字符串中字符的存取,可以用下标法,也可以用指针。
2024-12-31 12:37:55
1109
原创 C语言基础:指针(数组指针与指针数组)
我们之前所学的是指向数组元素的指针,本质上还是指针变量;现在我们学的是指向数组的指针,叫做数组指针。//int (*arr)[4] 这个是数组指针。概念:指针数组是一个数组,数组中的每一个元素都是一个指针。指针数组的本质是一个数组,只是数组中的元素类型为指针。数据类型 (*指针变量名)[行容量][列容量];概念:数组指针是指向数组的指针,本质上还是指针。需求:用指向元素的指针变量输出二维数组元素的值。数据类型 (*指针变量名)[容量];数据类型 *数组名[容量];它指向的是一个完整的数组。
2024-12-26 19:22:33
1054
原创 C语言基础:指针(指针变量和变量指针)
内存地址:系统为了内存管理方便,将内存划分为一个个的内存单元(通常是1个字节),并为没一个内存单元进行编号。内存单元的编号称之为该内存单元的地址。一般情况下,我们每一个变量都是由多个内存单元构成的,所有每个变量的内存地址,其实就是这个变量对应的第一个内存单元的地址,也叫基地址/首地址。变量指针:变量地址称之为该变量的指针(本质是地址)。变量地址往往是指变量在内存中第一个内存单元的编号(首地址)int a;&a ---变量a的地址,也称为变量a的指针int arr[2];
2024-12-23 18:55:47
2712
原创 C语言基础:函数(作用域、生命周期、值传递与指针传递)
我们在函数设计的过程中,经常要考虑对于参数的设计,换句话说,我们需要考虑函数需要几个参数,需要什么类型的参数,但我们并没有考虑函数是否需要提供参数,如果说函数可以访问到已定义的数据,则就不需要提供函数形参,那么我们到底要不要提供函数形参,取决于什么?外部函数:使用extern修饰的函数,称作外部函数,extern是默认的,可以不写(区分环境),也就是说本质上我们缩写的函数基本上都是外部函数,建议外部函数在被其他文件调用的时候,在其他文件中声明的时候,加上extern关键字,主要是提高代码的可读性。
2024-12-19 13:06:38
1336
原创 C语言基础:函数
函数:实现一定功能的,独立的代码模块。我们的函数一定是先定义,后使用。使用函数的优势:①我们可以通过函数提供功能给别人使用。当然我们也可以使用别人提供的函数,减少代码量。② 借助函数可以减少重复性的代码。③ 实现结构化(模块化)程序设计思想。关于结构化设计思想:将大型的任务功能划分为相互独立的小型的任务模块来设计。函数是C语言程序的基本组成单元:C语言程序是由一个(必然是main函数)或多个函数组成。[返回类型 | 类型标识符] 函数名([形参列表]) // 函数头 | 函数首部。
2024-12-18 13:17:07
1295
原创 C语言基础:数组(字符数组)
元素类型为char字符型的数组,字符数组往往是用来存储字符串数据的。需要注意的一点是,我们C语言中的字符是字节字符。
2024-12-16 13:00:22
1671
原创 C语言基础:数组(二维数组)
二维数组本质上是一个行列式的组合,也就是说二维数组是由行和列两部分组成。二维数组数据是通过行列解读。二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素是一维数组。(也就是说数组的元素可以是数组类型)。
2024-12-12 12:55:52
2001
原创 C语言基础:数组(一维数组)
数组是相同类型,有序数据的集合。语法:类型说明符 数组名[数组容量]说明:数组的类型说明符是由数组中的元素来决定,也就是元素是什么类型,数组就是什么类型数组名也是标识符,我们所说的数组(名),大家可以理解为数据类型是数组的变量(名)。命名规则与变量名相同。遵循标识符命名规则。数组容量也可以叫做元素个数或者常量表达式,表达式必须为整型,可以包含常量和常量符号,但是不能是变量。int arr[5];//常量//符号常量//常量表达式类型:代表了数组中元素的类型。
2024-12-12 12:52:39
1135
原创 C语言基础:循环结构
代码的重复执行,就叫做循环。for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限驯悍的几率。应用场合:for语句往往应用于循环次数事先可以确定的场景。死循环for(表达式1;;表达式3);for(;;
2024-12-10 12:58:51
1579
原创 C语言基础:分支结构
在C语言中,用1(非0)表示关系表达式的值为真(条件成立),0表示关系表达式的值为假(条件不成立),即关系表达式的值要么是1(条件成立),要么是0(条件不成立)若表达式的值为1,则执行语句1;不管条件表达式成不成立都要执行一个语句,其次需要主要的是,语句1和语句2都可以是复合语句。条件判断的结果是逻辑值(布尔类型值,也就是说分支语句的条件可用使用关系表达式和逻辑表达式),在程序中用真(1)和假(0)来表示。若表达式值为Ture(非0),则执行表达式后面的语句,执行完该语句后继续执行if语句后的语句。
2024-12-05 13:39:13
1599
原创 C语言基础:C语句、数据的输入输出和进制
显然,这个程序中的第⼆个格式输出语句输出的结果是错误的,这是因为在第⼆个格式输出语句中,格式说明符%d是基本整型格式说明符,⽽输出项⽬是双精度型的数据,它们是不匹配的。③若输入语句 scanf("a=%d,b=%d,c=%f,d=%f",&a,&b,&c,&d);②若输入语句为 scanf("%d,%d,%f,%f",&a,&b,&c,&d);用%c格式输入字符时,空格和转义字符(\n)都作为有效字符输入,应注意: scanf("%c%c%c",&a,&b,&c);
2024-12-02 13:16:32
1476
原创 C语言基础:运算符和流程控制(算法、程序的三种基本结构)的概念
广义的说,为解决一个问题而采取的方法和有限的步骤,就称为”算法“例如:将大象放入冰箱的算法就可以如下描述:打开冰箱门-把大象装进去-关闭冰箱门。
2024-11-28 13:25:16
1458
原创 C语言入门基础+数据类型
数据类型其实是固定大小内存的别名,并且描述了一个变量存放什么类型的数据。简单来说就是组织和操作数据。数据:计算机要处理的数据(数字、字符串、文字、符号、图片、音频、视频等)。数据类型不仅帮助我们组织和操作数据,还绝对了程序如何有效的利用内存。了解数据类型的内存需求是理解计算机管理的操作数据的关键。小贴士:简单来讲,程序的运行需要用到内存。内存存储容量单位字节(byte):计算机存储容量的一种单位,一般应用层最小存储单元的表示。
2024-11-26 10:44:47
1295
原创 Linux基础:文件操作命令
说明:该指令是从文件系统的数据库中查找,缺点是新创建的文件没有在数据库中建立索引,用该指令找不到。gerp [选项] '要查找的字符串' 文件(文件路径)>> 追加式写入,就是在原本文件内容末追加内容 (保留原本的内容)语法:grep [选项] 要查找的字符串 文件(文件路径)语法:less [选项] 文件 (文件路径)语法:head [选项] 文件(文件路径)语法:tail [选项] 文件(文件路径)-n:从头开始显示n行内容(识别到换行符)语法:more 文件 (文件路径)
2024-11-23 13:15:50
521
原创 Linux基础:基本命令
说明:被移动文件名与目的地文件名不一致,相当于重命名了,重命名是移动和拷贝在特殊情况下的产物。-i:如果目的地路径下已经存在同名目录/文件,会交互提升。注意:cd后不跟文件路径,应该根文件夹(目录)路径。语法:mv 被移动的文件/目录路径 目的地文件/路径。cp [选项] 被复制的目录/文件路径 目的路径。-a:显示所有(包含隐藏文件)文件或目录。语法:mkdir -p 文件夹多层路径。-l:显示所有的文件或目录的详细列表。-r:递归复制,复制文件夹中的所有。参数:-p:可以创建多层文件夹。
2024-11-23 13:02:30
309
原创 如何在lcd上输出竖的七色线条
因为输出是按从左往右然后从在向下,在从左往右,所以我们需要两个循环嵌套。perror("文件写入失败!perror("lcd文件打开失败!
2024-11-12 18:46:29
448
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人