- 博客(13)
- 收藏
- 关注
原创 深入理解指针(2)
我们知道,arr除两个例外的其他所有情况下都代表首元素的地址,所以1 2行和3 4行的结果是一样的,都是去出首元素的地址,加一跳过四个字节也就是第二个元素的地址,而对&arr+1则跳过了40个字节也就是整个数组(地址是一串十六进制数,&arr最后两位20代表0*16^0+2*16^1,&arr+1的最后两位48,代表8*16^0+4*16^1,两数相减正好是40,也就是整个数组的大小),这就是&数组名的意义,这个例外也需要我们记住,上一篇博客我们已经对指针有了基本的理解,今天让我们来更深入的了解指针吧。
2025-04-12 16:13:57
461
原创 二进制操作符&进制转换
1.&a&b就是把它们的二进制补码每一位对齐,如果都是相应的位置都是1,那新的数据的二进制在该位就是1,其他情况该位就是0,这个逻辑就跟if语句中的&&一样,都为真才为真。2.|a|b也是把两个数据的二进制补码对齐,逻辑也跟if语句中的||一样,有真则为真,这里因为前面24位都是0,所以做一点简化没写。3.^a^b也是把两个数据的二进制补码对齐,对应的位置如果都一样就是0,不一样就是1;4.~按位取反操作符是弹幕操作符,~a的作用是将a储存在内存中的二进制补码每一位取反,0变成1,1变成0。
2025-03-12 15:31:53
632
原创 C语言:函数递归
然后自己调用自己,进入pow(2,2),同理继续通过return 2*pow(2,1),在分离一个2并使k-1,再进入pow(2,1)。再同理进入pow(2,0),此时k==0,符合限制条件,“递”过程结束。该函数调用结束,进入pow(2,1),接受pow(2,0)返回值,return 2 调用结束,再进入pow(2,2),接收pow(2,1)返回值,return 4;按照递归的套路我们知道,每次调用函数时我们可以提取个位,在递归调用时,将参数抛弃一位,当该数为0时,递归结束,我们直接上代码。
2025-02-26 18:55:47
718
原创 扫雷游戏代码详解
上图代码用了一个do while循环再结合switch语句就能制作出一个简易的界面,首先进入循环,通过menu函数打印菜单供玩家选择,玩家输入input的值后,如果输入1,则进入game函数开始游戏,输入0,则退出游戏,输入其他值,则进入default入口提示重新输入,循环根据input的值决定是否结束循环,逻辑较为简单。为了使代码易修改,我们将ROW和COL都定义为9,也就是九行九列,如果我们想要改变雷区的大小,我们就只需要改掉9为其他数字就好,不然则需要在代码的每一处都改数字,代码要“活”一点。
2025-02-18 20:52:47
794
原创 函数详解 static extern
函数就是一段子程序,函数中包含了一段代码,用来实现函数的功能,函数可以重复使用,能够增加代码的效率,使main函数中的代码更加简洁,增强代码的可读性。也有利于后期我们对于代码的维护。在C语⾔中我们⼀般会⻅到两类函数:•库函数•⾃定义函数自定义函数就是我们自己写代码实现的函数,库函数的作用是有限的,在实际情况中,往往需要我们自己来写函数实现我们想要的功能如果只用一个文件,那我们一般直接将函数写完后直接使用比如我们要写一个函数会判断闰年橙色是函数的定义,绿色的是函数的调用。
2024-11-08 16:25:53
824
原创 二分查找代码
因为数组是一个升序的数组,我们可以定义三个整形变量,一个代表数组最左边的元素,一个代表数组最右边的元素,一个代表数组最中间的元素。把n与最中间的元素对比,如果这个最中间的元素比n大,说明这个数组中间到最右边的元素都比n大,那么就没必要再拿这些元素与n相比较,他们一定跟n不一样,那么我们就要从最左边到中间元素的范围中寻找,然后我们在求出这个范围的中间元素然后跟n比较,每一次比较都减小一半范围,这样就能够大大提升代码的效率。如果按照正常的思路来说,遍历数组的每一个元素,把每一个元素与n相比较。
2024-10-23 22:33:32
1527
原创 一维数组 二维数组的理解 sizeof 变长数组
用法如上图 sizeof() sizeof计算的就是放在括号里的数据的大小 里面放数组名 就能计算整个数组的大小 这里输出的结果是40 因为arr是一个整形数组 里面有10个元素 一个整形在内存中占4个字节 10个整形元素在内存中就占40个字节 所以这个数组的大小为40个字节。按照之前的解释 二维数组就是存放一维数组的数组 每一行就是二维数组的一个元素 也就是一个一维数组 所以我们按照行初始化时相当于对每行的一个一维数组初始化 所以在大括号里再使用大括号 剩下的没初始化的元素便按照规则默认为0。
2024-10-20 21:17:06
958
原创 猜数字游戏
选择do while 循环是因为不管怎样我们都要先打印一次菜单供玩家选择 程序开头创建了input变量 进入循环后 先调用menu函数打印菜单并让玩家选择输入input的值 再用switch语句根据input的值来判断进入哪个入口 玩家选择1则开始游戏 选择0则结束游戏 选择其他的值则会提醒玩家选择错误 这里while表达式为input的值 如果玩家输入0则代表要退出游戏 其他非0值则代表继续 符合逻辑。这里我们调用5次rand函数并将生成的随机值打印。这样我们在每一次调用程序的时候就会改变一次种子。
2024-10-09 21:34:25
1418
原创 while循环 for循环 do while循环 break和continue语句 循环嵌套 goto语句
在之前while中的 continue的例题中 continue的执行导致i的值无法变化导致程序进入死循环 但在for循环中 当i等于5时执行continue语句 从而导致跳过了printf语句 但是会继续执行表达式3让i+1 因为在while循环中 循环变量的调整作为一条语句包括在while中 而在for循环中 循环变量的调整是用表达式3来执行 并非通过语句执行 所以continue语句在for循环中 不会影响表达式3的执行 这就是continue语句在while 循环和for 循环的差别。
2024-10-01 15:01:44
1880
原创 switch语句 break default
解释:switch语句会根据expression表达式的值选择进入相应值的case入口(就是case右边的value的值),然后执行相关语句 如果表达式的值与所有case入口的值不一样的话 就执行default语句。如上图 在加入了 break语句后 便打印了正确的答案 这就是break语句在switch中的用法 在每一个case的最后加入break语句就能保证switch语句只执行一个入口的代码。1.3 switch语句中的default。1.2switch语句中break的作用。1.switch语句。
2024-09-24 15:49:01
351
原创 if else语句 关系操作符 条件操作符 逻辑操作符 短路
上图为if else 语句嵌套在else中的例子 程序先判断输入的数是否为0 如果是则执行if语句 如果不为0则执行else语句并再次判断是正数还是负数 上图可能不太明显 修改一下如下图应该更加明显。上图为if else 嵌套在if语句中的例子 程序会先判断输入的数是否为正数 如果是则进入if语句再次判断该数是奇数还是偶数 如果不是正数 则进入else语句输出“非正数”上图为if else 的使用方法 即如果if的表达式为假 则执行else所包含的语句 简单来说:不走if 就走else。
2024-09-21 15:32:30
459
原创 你好 C语言
编程目标:听过这样一句话--如果我们变得迷茫 那就不要停下脚步 比别人更努力一点 所以在专业并非计算机的情况下 选择学习编程 目标很简单 为了让家人幸福。学习方法:计算机拥有深厚的历史 动手操作是十分重要的 想要学好编程 我认为在学习的过程中要进行大量的实操 不能光听。个人介绍:傅炜轩 19岁 就读于湖南理工学院 目前大二 专业为通信工程。学习时间:在完成大学课业的前提下金可能抽出时间 多学多做。梦中offer:大厂 如 腾讯 网易。
2024-09-14 14:45:11
585
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人