自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 掌握C语言:动态内存管理

图中就是将arr开辟出5个大小为int类型的空间,一般情况下都会开辟成功,如果开辟的空间过大之类的情况会导致开辟失败,开辟失败会将arr强转为空。通过这些函数所开辟或扩容出来的空间,需要自己手动释放,编译器不会主动释放,否则就会造成内存泄露等问题,这时候用free 函数就可以解决这问题。和malloc 一样,他扩容失败也会强转成空.图上realloc指的是扩容到10个Int类型的空间,而不是扩容10个int类型空间。calloc会将目标开辟空间,并将其全部初始化为0。三.realloc(扩容开辟空间)

2026-02-05 13:28:07 29

原创 掌握C语言:结构体

联合体和结构体相似,但不同的是,联合体中的所有成员共用的是同一块内存,所以联合体无法像结构体一样同时初始化所有成员,而且当联合体中的下一个变量被赋值后,那上一个变量的内存会被下一个变量所覆盖,以致出现随机值。其中struct是关键字,Date 是他的名字(可以任意取名),在这个结构体里面存放一个int 类型data,一个double类型score.也可以强行为他赋值,被赋值的变量之前的变量依旧从零开始,被赋值的变量 之后的变量就从赋的值开始加一。①可以通过.和->来进行访问结构体。枚举关键字:enum。

2026-02-04 18:47:14 32

原创 掌握C语言:内存函数

它一共有三个参数,第一个参数就是要设置的数组,第二个参数就是要设置的值,第三个参数就是设置的字节个数。它不仅可以设置整形数组,还可以设置字符型等其他数组。它一共有三个参数,前两个都是要进行比较的数组,最后一个则是要进行比较的字节个数。但它的使用要更安全,你可以把它看作是memcpy的完美替代。如果第一个数组大于第二个数组,则返回大于0的数。如果第一个数组小于第二个数组,则返回小于0的数。1.内存拷贝memcpy(以字节为单位)如果两个数组相等,则返回零0。2.内存移动memmove。

2026-02-02 13:04:38 18

原创 掌握C语言:字符函数和字符串函数

对于字符串的比较不能简单的用>,<,=符号,要使用这个函数来进行比较。如果找到了就返回匹配的起始位置,如果没找到就返回空。4.strstr用于在一个字符串中找另一个字符串。就是将arr2 的内容追加到arr1 的后面。这就是将arr1 的内容拷贝到arr2上。②strncat用于限制追加的字符长度。如果arr1<arr2,就返回小于零的值。如果arr1>arr2,就返回大于零的值。②strncpy 用于控制拷贝长度。大写字母返回0,非大写字母返回非0。如果arr1=arr2,就返回0。

2026-01-30 15:08:20 56

原创 掌握C语言:指针(3)

1.二维数组的每一行可以看作是一个一维数组,所以二维数组其实是一个一维数组的数组,二维数组的首元素是它的第一行,所以我们访问二维数组就可以使用arr[i][j]的形式来访问二维数组。函数指针数组:int(*pfArr[5])(int,int)={0,Add,Sub,Mul,Div}里面存放的都是函数。我们后续想要访问结构体的内容就可以使用->符号,如:ps->name,ps->age.函数调用就可以这样写:int ret=(*pf)(4,5);函数指针:int(*pf)(int,int)=&Add;

2026-01-29 15:23:25 185

原创 掌握C语言:指针(2)

第二个打印的是首元素的数字,这里的arr表示的就是首元素的地址,因此在这里引用就能得到首元素的数字。第一个打印的是整个数组的大小,每个元素都是一个整型,四个字节,一共10个元素,合计40个字节。②一维数组传参的本质传递的是数组首元素的地址,所以形参即使写成数组的形式本质上也是个指针变量。在函数中,传的是首元素地址,而不是整个数组的地址,因此对它解引用就会得到首元素的数字。数组指针指的是指向数组的指针,数组指针变量中存放数组的地址,本质上是指针。指针数组是存放指针的数组,本质上是数组。

2026-01-28 15:41:44 100

原创 掌握C语言:指针(1)

①const 放在*的左边限制的是指针指向的内容,也就是不能通过指针变量来修改它所指向内容,但是指针变量本身是可以修改的。②const放在*号的右边,限制的是指针变量本身,指针不能改变它的指向,但是可以通过指针变量修改它的指向内容。①指针-指针的绝对值是指针和指针之间元素的个数。(2)32位下,指针的大小为四个字节,不论为什么类型。(3)指针的类型决定着指针解引用访问的字节个数。如:char*的指针解引用只能访问一个字节。而int*的指针解引用可以访问四个字节。(6)野指针就是指针指向的位置是未知的。

2025-12-18 22:30:49 289

原创 掌握C语言:操作符详解(4)

①整型提升:表达式中的字符和短整型操作数在使用之前被转化为普通整形,这种转化称为整形提升,有符号的整数提升是按照变量的数据类型的符号位来提升的。那1<<1表示的是1的二进制位向左移动一位,就变成了00000000000000000000000000000010。如1>>1,表示的数字1的二进制位向右移动一位,就变成了。①&:对应的二进制位有0则为0,两个同时为1才为1。②||:只要有1就是1,两个同时为0才为0。注意:任何值^相同值等于零,如:3^3=0。0^任何值=任何值,如:0^3=3。

2025-12-16 20:18:50 323

原创 掌握C语言:操作符详解(3)

十六进制每个数最大不大于等于十六,且十六进制的10 11 12 13 14 15分别用A B C D E F表示。①一个数用二进制表示的比特位共有32位,如:可以10进制的1用二进制可以表示为00000000000000000000000000000001。最高位为符号位,其余31位为数值位,符号位用1表示负,用0表示正。④负数时,将原码的符号位不变,其余位依次按位取反就可以得到反码,反码加1就可以得到补码。①整数的二进制表示方法有三种,即原码,反码,补码。③正数的原码,反码,补码相同。

2025-12-10 22:33:46 198

原创 掌握C语言:函数递归

但在实际应用中递归却并不方便,这就涉及到后续的知识了。用递归可以快速解决n的阶层,菲波那切数列等问题。由于没有设置条件,所以他们会无限递归下去。函数递归其实就是函数直接或间接调用自己。就是在本函数内部直接调用本函数。就是两个函数互相调用。

2025-12-09 20:12:05 180

原创 掌握C语言:函数(2)

如果修饰全局变量或者函数的话,就是限制在本文件内使用,无法通过extern 来声明。就是可以将另一个文件的变量或函数在本文件内使用,前提是没有被static修饰。static能使全局变量的外部链接变为内部链接,只能在本文件内使用。④生命周期:生命周期指的是变量的创建到变量的销毁之间的一个时间段。①数组在传参的时候,实参就写数组名就行,形参也是数组的形式。①static用于修饰局部,全局变量,修饰函数。形参如果是二维数组,行可以省略,列不可以省略。④形参操作的数组和形参的数组是同一个数组。

2025-12-08 19:00:41 172

原创 掌握C语言:函数(1)

第一个int 表示的是函数返回类型为整型,Fac 就是函数名称,可自行命名,但要遵守命名规则,括号里面的a表示形参,A的类型为int类型。①return语句后面可以是一个数值,也可以是一个表达式,如果是表达式,则先执行表达式,再返回表达式的结果。③return返回的值和函数返回类型不一致,系统会自动将返回的值隐式转化为函数的返回类型。⑤函数的返回类型如果没写的话,编译器认为返回的是int类型的值。(2)函数的返回类型可以是void,表示函数没有返回类型。(1)形式:函数返回类型+函数名+形参。

2025-12-03 20:30:35 182

原创 掌握C语言:数组(2)

sizeof(arr)/sizeof(arr[0])表示的就是数组元素个数。其中sizeof(arr)表示的是整个数组的字节数,一个整形为四个字节,这个数组中的10个元素都是整形,所以sizeof(arr)的结果就是40,而arr[0]表示的是一个元素即四个字节,所以sizeof(arr)/sizeof(arr[0])两式相除得到的结果就是10个元素。不完全初始化规则跟一维数组差不多,但二维数组的行可以省略,但列不能省略。①二维数组就是一维数组的数组,它存储的其实就是一维数组。完全初始化就是跟上式一样。

2025-11-27 22:01:07 408

原创 掌握C语言:数组(1)

中括号内写的个10代表有10个元素。那么剩下的元素也就是后面5个元素默认初始化为零。所以它的10个元素分别为1,2,3,4,5,0,0,0,0,0。③[10]表示的是元素个数,代表的是里面有10个元素,就如例子里面的从1~10都是元素。元素个数也可以省略不写,写出多少个元素,就会默认多少个元素。以int arr[10]={1,2,3,4,5,6,7,8,9,10};虽然并没有写多少个元素,但我在后面大括号写了1~10十个元素就代表有十个元素。1的下标为0,2的下标为1,一直往后递增,直到10的下标为9。

2025-11-26 20:44:10 265

原创 掌握C语言:分支和循环(2)

但是如果只用这个函数,第一次使用才是真正的随机,看图上随机了个41,但使用第二次,第三次随机数依旧是41,这就是伪随机,看似随机的,其实又没有完全随机。若想要a~b之间的随机数,就可以使用这个公式:a+rand()%(b-a+1)rand函数,包含于头文件<stdlib.h>,这个函数是用来生成随机数的。使用time函数用来设置随机数,它包含于头文件<time.h>。这样就是真正的随机,每一次使用都会产生不一样的随机数。这样就成功把随机数设置在1~10的范围。

2025-11-25 20:05:34 265

原创 掌握C语言:操作符详解(2)

④短路:逻辑操作符先对左侧表达式求值,再对右侧表达式求值,如果左侧表达式满足逻辑运算符的条件,就不再对右侧表达式求值,称为短路。②多个关系操作符不宜连用,如a<b<c(错误形式),a<b && b<c(正确形式)③丨丨:逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真则为真,否则为假。②&&:逻辑与运算符,就是并且的意思(两侧表达式都为真,则为真,否则为假。如果exp1为真,exp2计算,如果exp1为假,exp3计算。对于丨丨操作符来说,左操作符的结果不为零,就无需执行右操作符。

2025-11-20 22:00:33 247

原创 掌握C语言:分支和循环(1)

表示若a等于1,则执行case1 后边的语句,若a等于2则执行case2的语句,若a既不等于1,也不等于2则执行default 后边的语句(default 可以放在任何位置上,但一般放在最后。(1)break的作用是用于永久终止循环,只要break被执行,直接就会跳出循环,继续往后执行。第一次循环,先答应,后面遇到continue,后面的代码不执行,再次进入循环反复,结果为无穷个1。其中表达式1为初始化表达式,表达式2为判断,表达式三为调整。表示如果a等于2则输出a,若a不等于2则不输出a。

2025-11-18 23:03:53 405

原创 掌握C语言:操作符详解(1)

①++,--为自增,自减运算符,如++a的结果与a=a+1的结果一样,但其中分为前置++,后置++,如++a(前置++,口诀:先++,后使用),a++(后置++,口诀:先使用,后++),例:①前置++:int a=1,int b=++a,使用口诀(先++,后使用),a先自增1,此时a==2,再将a赋给b,最后结果为a==2,b==2。②后置++:int a=1,int b= a++,使用口诀(先使用,后++),a先赋给b,此时b==1,再将a自增1,最后结果为a==2,b==1。

2025-11-14 15:34:38 137

原创 掌握C语言:操作符简介

4.赋值操作符:=,+=,--,*=,/=,%=,<<=,>>=,δ=,丨=,^=(就是赋值操作符=与其他操作符的结合。1.算术操作符:+, - , *, /,%(就是加减乘除的运算,跟平常的加减乘除的运算差不多,又有点区别。6.关系操作符:>,>=,<,<=,==,!12.结构成员访问操作符: .,->(学结构体和指针的时候会用上),++,--,δ,*,+,-,~,sizeof。3.位操作符:δ,丨,^,~(也是用二进制位进行计算)2.移位操作符:>>,<<(移位移动的是二进制位)

2025-11-11 11:34:12 156

原创 掌握C语言:数据类型

(注意:当使用unsigned类型会增大一倍的最大范围,如:int的范围为-2147483648~2147483647,而unsigned int的范围为0~4294967295).无符号整型:size_t,size_t可能是unsigned int,也可能是unsigned long,还可能是unsigned long long,总之是无符号整型。对应的标识符为%zu.布尔类型:_Bool/bool,它的取值为true和false. true为真(一般为1),false为假(一般为0)。

2025-11-10 20:46:43 351

原创 掌握C语言:scanf

第二个参数中a为变量,&为取地址符,使用库函数scanf第二个参数必须是地址。本身不是地址的话,就要使用取地址符。反之,本身就是地址的话,就不需要使用取地址符了,如arr[10]数组,数组名即是首元素的地址,所以输入它的话是不需要取地址符,如scanf("%d",arr);其中的标识符%d与printf 是相当的,也可以替换,规则和printf一样。当然中间也不一定非是逗号,也可以是其他的符号,这取决于你自己怎么写,不过肯定的是输入格式必须相互匹配。

2025-11-08 16:25:43 267

原创 掌握C语言:printf

打印整数:使用%d,如printf("%d",15);为long,使用%ld。当然,如果简单书写的话,也可以不使用打印标识符,如:printf("15"),printf("abcd")......打印浮点数(小数):使用%f,如printf("%f",15.3);打印十六进制:使用%x,如printf("%x",255);打印八进制:使用%o,如printf("%o",10);打印字符串:使用%s,如printf("%s","abcd");打印字符:使用%c,如printf("%c",'a');

2025-11-06 19:33:58 336 1

原创 扫雷游戏(代码版)

先设计一个游戏框架,选一就是开始游玩,由于在c语言中零为假,所以选零就跳出循环直接退出游戏。我设计的扫雷是9×9格的。但由于为了防止越界,是要多考虑两行,两列。玩的时候是在9x9格中选择,但实际考虑要11×11格。然后设计函数,将所有格都标记为*号。将雷的数量用srand, rand来进行随机生成,将雷标记为字符1,但生成的雷不打印在屏幕里。当玩家打出一个坐标,若未踩雷,就通过另一个函数来标记周围8个格子的雷数,并打印在屏幕里。若踩雷,则宣告游戏结束,然后打印所有雷的位置。这就是游戏的全过程。

2025-07-28 15:06:03 289

原创 掌握C语言:从条件到循环

首先学习了if语句,在这其中学习的if...else...,嵌套if。学习的关系操作符,条件操作符,逻辑操作符。三钠循环,while循环 for循环,do while循环。break 用于终止循环,continue 用于跳过本次循环。goto 语句用于跳过代码。还有rand 用来生成随机数,但生成的是伪随机,用srand 来初始化随机数的生成器,学习的time设置随机数。下面是我做的猜数字小游戏。

2025-07-22 15:17:58 267

空空如也

空空如也

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

TA关注的人

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