自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 C语言进阶————指针4

在冒泡排序的代码的基础上修改,唯一不同的地方就是在内循环中进行比较的代码,将相关值改成改成函数的相关参数,在使用比较函数时用最开始的函数值base转换成char*类型后加上移动的j和宽度值width的乘积,与此对比的(j+1)的元素也是同样乘上宽度值width。判断cmp函数的返回值,然后通过swap函数进行交换。在该代码中,首先创建一个包含姓名、年龄的结构体,在使用qsort函数分别进行排序,对姓名排序时使用strcmp函数进行排序,而年龄用指针强制转换进行排序,最后分别将内容进行打印查看结果。

2026-02-08 23:29:15 95

原创 C语言进阶————指针3

其中base是排序数据的起始位置,num是待排序的数据元素的个数,width是待排序的数据元素的大小(单位:字节),int (* _ cded cmp)(const void* e1,const void* e2)是函数指针,这是根据自己排序内容写的比较函数根据自己需求来写,其中_ cded是函数调用约定。②声明的signal函数的第一个参数的类型是int,第二参数得类型是函数指针,该函数指针指向的函数参数是int,返回类型是void;再来看两个有趣的代码并且去仔细了解一下两个代码各自的含义,代码如下。

2026-02-07 23:05:56 690

原创 C语言进阶————指针2

在这里使用了两种方法打印二维数组,借助常用的方法来更好的理解使用数组指针方法打印,在数组指针的方法中其中int(*p)[5] p的类型是int(*)[5],p指向的是一个整型数组,数组又5个元素,所以p+1→跳过5个int元素的数组;但是需要注意的是函数名和&函数名打印的地址一致,所以对于函数名来说,&函数名和函数名都是函数的地址。其中p是指向数组的,*p其实就相当于数组名,而数组名又是首元素的地址,所以*p本质上是数组首元素的地址。可以传的形式有一级指针的地址、二级指针、一级指针的数组名。

2026-02-06 15:23:39 292

原创 C语言进阶————指针1

为什么会出现这种结果呢,首先两个数组arr1和arr2虽然内容相同但是数组的地址不同所以两个数组不同。对于ch1和ch2在前面加了const的字符串不能修改,所以可以将其看成常量,在内存中会有专门的只能读不能写的寄存器中存储,在该内存中如果出现完全相同的变量,为节省空间自动将其看成一个变量,所以就会出现ch1等于ch2的情况。③指针是有类型的,指针的类型决定了指针±整数的步长,指针解引用操作时候的权限;该表达式的含义是将字符串中首字母a的地址赋值给指针p,3.数组指针:是指针,指向数组的指针。

2026-01-30 23:08:33 364

原创 C语音进阶————数据在内存中的存储2

但是实际上E是可以出现负数的,所以规定存入内存的真实值必须加上一个中间数,8位的中间数是127,11位中间数是1023。b.E全为0:浮点数的指数E等于1-127(或1-1023)即为真实值。a.E不全为0或者不全为1:指数E的计算值减去127(或者1023),得到真实值,再将数字M前加上第一位的1。②对于64位的浮点数double,最高的1位为符号位S,接着的11位是指数E,剩下的52位为有效数字M。①对于32位的浮点数float,最高的1位为符号位S,接着的8位是指数E,剩下的23位为有效数字M。

2026-01-27 22:33:25 442

原创 C语言进阶————数据在内存中的存储1

原因:使用补码可以将符号位和数值域统一处理,这可以使加、减法可以统一处理(补码的加减分都可以统一使用加分完成,CPU只有加法器),此外,补码与原码互相转换,其运算过程是相同的,不需要额外的硬件电路(原码和补码之间的相互转换都可以通过取反加1得到)小端(字节序)存储:是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中(补码倒着存,如上数据存储)。大端(字节序)储存:是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中(补码正着存)。② 如何看待内存空间的视角。

2026-01-25 14:58:15 969

原创 C语音初阶————调试实用技巧2

了解strcpy函数后模拟自己写一个strcpy函数:一共分为两个版本,一个是以初学者写出较为简单的代码,而另一个更符合以上所说的“优秀的代码”也是更接近库函数实际使用的代码。按下F5(F5+Fn)进入调试(一些时候可能需要设置断点才能进入调试),在调试环境下,选择【调试】选项卡→【窗口】选项进行以下菜单的选择。查看临时变量的值可以通过的【自动窗口】、【局部变量】、【监视】(监视窗口可以有多个同时监视不同变量)。原因:1.栈区内存的使用习惯是先使用高地址的空间,再使用低地址处的空间。

2026-01-21 01:38:32 974

原创 C语言初阶————调试实用技巧1

所以我们得找寻正确的方法,一名优秀的程序员也是一名出色的“侦探”。F5:启动调试 经常用来直接跳到下一个断点处 (一般按下后会出现如下图所示的调试相关窗口,可查看变量和内存以及随着操作的相关内容的实时变化)*出现该窗口的前提是程序中有设置的断点*注意:在调试时可以跳回已运行的步骤,但是不建议,因为向前调试后的参数值一般不准确,向前调没有太大意义。

2026-01-14 22:24:17 516

原创 C语言初阶————结构体

其中struct结构体关键字,tag结构体标签(可以自定义),member_list成员列表(可一个或多个), variable_list使用该类型创建的变量(可有可无,一般不建议使用)。可以理解为结构体是一种定义复杂对象的一种描述方式,常见的复杂对象有人(包含姓名,电话,性别,身高等)、书(包含书名,作者,定价,书号等)等,而该方式内可以用不同的内置类型(如int、long、char、double等)来帮助描述。与数组的区别:数组是相同类型的集合,而结构体可以是不同类型变量的集合。1.结构体的基础知识。

2026-01-10 20:51:03 504

原创 C语言初阶————指针3

③指针关系运算: 指针间的比较:规定允许与指针所指对象的最后一个地址向后的位置进行比较,但是不允许与所指对象的第一个地址向前的地址进行比较。(4)指针数组:存放指针的数组。(1)指针的运算:主要包括指针加\减整数、指针加\减指针、指针的关系运算。

2026-01-10 15:44:00 483

原创 C语音初阶————指针2

③指针指向的空间释放:子函数中的局部变量在出函数的时候就销毁(将地址归还给内存,当该地址不使用内容暂时不改变),该指针变量为野指针。(1)野指针的概念:野指针就是指针指向的位置是不可知的。(随机的,不正确的,没有明确限制的)①未初始化,意味着没有明确指向(非法访问),当一个局部变量不初始化的话,默认赋值随机值。①指针初始化,当不知道赋何值时为空指针,默认空指针为NULL。②指针越界访问:当指针的范围超过界限该指针为野指针。(3)如何避免野指针出现?③避免返回局部变量的地址。④指针使用之前坚持有效性。

2025-08-26 23:49:06 385

原创 C语言初阶————指针1

由此可以得出:指针类型决定了指针的被解析引用的时候访问几个字节。所以指针的类型决定了指针+-1操作的时候跳过几个字节,也就是步长的大小。①指针就是内存单元的编号,也就是地址,口语中所说的指针通常是指指针变量,用来存放地址的变量。②指针的大小:在32位平台(x86)是4个字节,在64位平台(x64)是8个字节。既然不同类型的指针变量的大小相同,是否可以将一个类型直接代替其他类型的指针变量吗?②指针的类型决定了指针+-1操作的时候跳过几个字节,也就是步长的大小。答案当然是不能,那指针变量的类型有什么作用呢?

2025-08-25 14:44:15 679

原创 C语言初阶————操作符3

①整型提升(大小低于普通整型的的数据):C语音整型算数运算总是至少以缺省整型的精度进行的,为获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型。其他操作符 > 单目操作符 > 算术操作符 > 关系操作符 > 按位操作符 > 逻辑操作符 > 条件操作符 > 赋值操作符 > 逗号表达式。总结:写出的表达式如果不能通过操作符的属性确定唯一的路径,那么该表达式是存在问题的。整型提升是按照变量的数据类型的符号位来提升的,无符号位高位补零。②算术转换(大小高于或者等于普通整型的数据):向上转化。

2025-08-23 00:42:32 328

原创 C语言初阶————操作符2

区别sizeof和strlen:①sizeof是操作符,不是函数 ②strlen是求字符串长度的函数,不是操作符。(一)单目操作符:只有一个操作数的操作符,上次介绍的基本上都是双目操作符(需要两个操作数)。例题:利用操作符使一个数的二进制的指定为取反,并再用操作符还原。(五)逗号表达式:用逗号隔开多个表达式,结果为最后一个表达式结果。表达式1为真则执行表达式2,如果表达式1为假则执行表达式3。前置--、++:先--或++,再使用。后置--、++:先使用,再--或++最后的结果为最后执行的表达式结果。

2025-08-22 20:40:51 354

原创 C语言小游戏————扫雷游戏(难度选择,自动排开,标记)

③设置雷:在设置雷之前,玩家先进入难度选择,难度一共分为4个模式:1.简单模式(5个雷), 2.普通模式(10个雷),3.困难模式(15个雷),4.diy模式(玩家自主选择雷的个数),将选择的雷的个数传到设置雷的函数中去,为方便后续判断玩家的输赢将设置雷的个数返回到游戏函数中。当每次排查后(不包括排查到雷的情况)都会进行一次判断,判断在show数组中的未被排查的坐标个数,在循环的最后判断输赢时,将未被排查的坐标的个数和雷的个数进行比较,若相等就提示玩家游戏结束,玩家胜利,否则将继续游戏。

2025-08-17 14:16:50 737

原创 C语言小游戏————三子棋

首先是玩家下棋,为了方便玩家输入坐标,将玩家输入的坐标都进行-1处理对应的坐标被'*'占据,当然在玩家输入坐标后系统要进行判断,该坐标是否符合数组范围,该坐标是否以及被使用,制定判断无误才表示玩家下棋完成;然后是电脑下棋,这里就需要使用生成随机数的函数rand(范围0~32767),以及使每次随机数都不相同的srand (随机数的起始值)和time(时间函数,保证每次随机数不相同)的结合使用,当然在电脑下棋时依旧得判断代码是否被使用和输入代码是否符合数组范围。

2025-08-16 14:24:04 874

原创 C语言初阶————操作符1

> 右移操作符:①算数移位:右边丢弃,左边补原符号位(除2) ②逻辑位移:右边丢弃,左边补0。复合赋值: += -= *= /= %= <<= >>= &=!(3)位移操作符:操作的只能是整数,移动的位数只能为正整数,移动的是该数的二进制。相关知识点:①进制:二进制(0、1),十进制(0~9),八进制(0~7)(不同编译器右移操作符不同)

2025-08-13 20:47:47 683

原创 C语音初阶————数组2

a.sizeof(数组名),这里的数组名表示整个数组,计算整个数组的大小,单位字节。二维数组的数组名表示数组的第一行地址,所以数组名+1表示地址。列数:sizeof(数组的第一行元素/数组的第一行第一个元数)b.&数组名,这里的数组名表示整个数组,取出整个地址。一般数组在函数的参数一般有两种形式:①数组;示例:冒泡排序:将一组数按照升序排序,然后输出。行数:sizeof(数组名/数组第一行)(1)数组作为函数的参数。(2)数组名是什么?

2025-08-06 20:55:55 383

原创 C语言初阶————数组1

③二维数组的使用:和一维数组一样通过下标调用,行数和列数都是从0开始,在某种理解下可以把二维数组当做一维数组的数组。在C99标准之后,数组的大小可以是变量,为支持变长数组(变长数组不能初始化)(3)数组的越界:C语言编译器不会做越界检查,一般越界不会出现错误,只有程序员自己检查。和一维数组的定义一样,唯一的区别是arr_name[行][列]注意:在C99标准之前,数组的大小必须是常量或常量表达式。②一维数组的初始化:创建数组的同时给数组一些合理的值。④一维数组在内存中的存储:数组在内存中是连续存放的。

2025-08-03 21:14:16 696

原创 C语言初阶————函数4

b.使用static对象代替nonstatic局部对象,可以减少每次递归调用和返回时产生和释放nonstatic对象的开销,且static对象可以保存递归调用的中间状态为各个调用层所用。当用递归时出现死循环或是(死递归)一直开辟栈空间最终产生栈空间耗尽的情况,也就是栈溢出,如何解决?程序调用自身的编程技巧称为递归,递归的主要思考方法在于:把大事化小。2.n > 2时,f(n) = f(n - 1) + f(n - 2);1.n = 1, 2时,f(n) = 1;(3)递归与迭代(非递归)

2025-08-01 18:35:07 638

原创 C语言初阶————函数3

①函数的声明:参数名字可加课不加,先声明后使用,一般重新创建头文件存放 ②函数的定义:指函数的具体实现,交代函数功能。c.函数定义没有参数,但传了参数默认不使用,若int test(void)明确说明函数不需要参数,才不能传参数。②链式访问:把一个函数的返回值作为另一个函数的参数,但前提是需要有返回值。相关知识点:printf的返回值是打印的字符个数。b.函数没有明确的返回,默认返回最后一条。d.主函数(main)默认有三个参数。(2)函数的声明和定义。

2025-07-31 18:38:21 554

原创 C语言————函数2

b.布尔类型(bool):是C99引入的用来表示真假的变量,大小1个字节,包括true(1)和false(0)两个元素,头文件stdbool.h。③http://en.cppreference.com(英文版)④http://zh.cppreference.com(中文版)a.对于数组的调用是调用数组首元素的地址,看上去是调用数组,实际上是指针。a.sqrt()函数:C语言的开平方函数,头文件math.h。b.形参和实参的名字可以相同也可以不同。(2)函数的相关练习。素数:只有1和本身两个因子的数。

2025-07-30 19:18:16 560

原创 C语言初级————函数1

①传值调用:在此调用中形参相当于实参的一份临时拷贝,改变形参不会影响实参 ②传址调用:将函数外部创建的内存地址传递给函数参数的一种调用函数的方式,使得函数内部可以直接操作函数外部的变量。库函数分类:a.IO函数 b.字符操作函数 c.字符串操作符函数 d.内存操作函数 e.时间/日期函数 f.数学函数 g.其他库函数。statement;②实际参数(实参):真实传给函数的参数,可以是常量,变量,表达式,函数。(2)C语言中函数的分类。

2025-07-29 18:50:53 638

原创 C语言初阶

③ time(time_t *t) 返回从1970年1月1日到现在的秒数,若为空指针将返回值存在的t指针所指的内存,头文件#include<time.h>------库函数:执行系统命令,头文件#include<stdlib.h>②goto语句的使用,关机程序:电脑运行起来后,1分钟内关机,如果输入:我是猪,就取消关机。猜数字游戏:由电脑生成一个随机数,用户猜,猜的次数不限,直到猜对为止。② 系统关机命令:shutdown -s -t 60 (60秒后关机)②不进入游戏->退出游戏。

2025-07-29 00:07:48 382

原创 C语音初阶

二分查找法在大多数情况下较简洁高效,顺序查找只能挨个查找查找次数最大为n,而二分查找最多次数为log2(n)特点:由于do...while语句的特殊性其至少执行一次循环语句,循环语句默认只有一条,多余一条需加{}(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均错误,则退出程序)do...while语句一般使用较少,所以相关知识点需要掌握的也相对来说较少。相关知识点扩展:比较两个字符串相等,不能使用“==”,而需要使用strcmp。continue:跳出本次循环语句后面的,进行判断。

2025-07-28 01:28:44 453

原创 C语言初阶

i++)的使用,对于c语言可能一些编译器不支持(所以避免这样输入)①for循环的判断部分不可省略,省略后for循环恒成立(死循环),相当于while(1)②建议for的语句的控制变量的取值范围根据情况判断开闭区间,提高代码可读性。其中表达式1表示初始化部分,表达式2表示条件判断语句,表达式3表示调整部分。for循环的执行顺序:初始化部分->条件判断语句->循环语句->调整部分。tips:①不可以在循环体内修改循环控制变量,防止for失控。(3)for语句的循环控制变量。(4)for循环的变种。

2025-07-26 22:52:26 545

原创 C语言初阶

#当getchar获得语句结束于输入语句结束(\n)或者EOF(end of file)时。②putchar:相当于printf,但只能输出字符。(2)利用getchar遇\n和EOF时结束的特性,结合while语句可用于清除缓存。(1)扩展:①getchar:相当于scanf,但只能输入字符。(3)利用while循环,只对输入的数字进行打印 ,如图。如下:(Ctrl+K 退出循环)

2025-07-25 00:28:02 442

原创 C语言初阶

(2)default语句在switch语句的使用,用于case语句不匹配的条件,default语句一般放在switch语句最后且只能有一条。default语句格式。②continue:跳出本次循环,进入下一次循环判段。当分支过多时if语句使用起来较为麻烦,于是就有了switch语句对于分支过多时使用。①break:永久跳出循环。while(表达式)(1)while语句的格式(当表达式为真时进入循环)(一)判断语句(分支语句)-switch语句。(1)switch语句的格式。(二)循环语句-while语句。

2025-07-23 17:00:45 211

原创 C语言初阶

if(表达式) if(表达式)首先是对C语言的语句分类,主要分为五类:表达式语句、函数调用语句、控制语句、复合语句、空语句。循环语句:do while语句、while语句、for语句。两条件满足其一:(表达式1||表达式2)转向语句:break语句、continue语句。①单分支(表达式为0时表示假不执行语句,表达式非0表示真执行语句)控制语句包括条件语句(分支语句):if语句、switch语句。

2025-07-23 16:22:16 283

原创 初识C语言

(1)结构体的定义:把一些单一类型(复制对象)组合在一起进行自定义类型,使其变机构化,方便使用。在定义过程中会用到一个关键字struct(自定义类型),例如对学生的信息进行组合(如图)方法二: 结构体指针变量->成员名 (->结构成员)方法一:(*结构体指针变量).成员名。(2)结构体对象的打印:①在主函数中的打印:结构体对象.成员名。

2025-07-23 15:28:48 216

原创 初识C语言

指针主要分为两个部分:(1)指针的定义:什么是指针?指针通俗的来说就是一个变量存储的位置,也就是用来存放地址,如*p=&a就是用p来存储a的地址,与取地址符&的作用大同小异。(2)指针的变量大小:不管是什么类型的指针,都是用来存放地址的,大小和地址的类型无关,取决于一个地址存放的时候需要多大的空间,如果是32位的计算机内存就为32bit也就是4byte,64位的计算机内存就为64bit也就是8byte,那么32位机的指针变量大小就为4(字节:byte),64位机的指针变量大小就为8(字节:byte)。

2025-07-18 23:53:01 242

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除