c语言
文章平均质量分 77
玛丽亚后
大三老登,记录平时的所学所感
展开
-
C语言——指针进阶(四)
解析了关于数组与指针的相关笔试习题原创 2024-01-29 22:14:09 · 1420 阅读 · 7 评论 -
C语言——指针进阶(三)
讲述关于strlen和sizeof对于各种数组与指针的计算规则与用法。另外还有qsort函数的模拟实现(可以排序任意类型变量)原创 2023-09-15 10:14:44 · 1019 阅读 · 39 评论 -
C语言——指针进阶(二)
再尝试按照名字比较,这时候的名字是字符串,可不能用减号来表示结果了,可以用到strcmp这个函数来比较字符串,巧合的是strcmpd的返回类型与cmp的返回规则一致。这就是回调函数的神奇之处,用函数指针来接受所需要的函数功能,在calc函数里面使用已经接受了功能函数的地址的指针,输入实参。字符串之间的排序是按照字典顺序比较的,比如abc与aq,一开始两个a相同,但后面的q比b大,所以abc排在aq的前面。cmp的规则是当p1指向的元素>p2指向的元素时返回大于0的数字,相等返回0,小于返回小于0的数字。原创 2023-09-10 00:30:05 · 1572 阅读 · 67 评论 -
C语言——指针进阶(一)
需要明确两点:1是确定好类型,2是标注大小。 //arr[i]-->*(arr+i)(首个元素的地址+i而不是整个元素地址+i) 分享一段有趣的代码: 简化的版本:指针进阶确实很绕,这个过程要不断地去刨析它,追根溯源。不仅仅得时常记忆,还得多去用指针,这样后续遇到关于指针类型的难题才不会被难住。原创 2023-08-27 22:58:47 · 5272 阅读 · 49 评论 -
数据在内存中的存储
之所以里面包含字符是因为字符在内存中存储的是字符的ASCII码值,ASCII码值是整数,所以字符类型归类到整形。有符号位说明会把8位中的最高位当成符号位,而无符号位则是8位都是实际数值。我们通过调试输入a,b地址来看内存的时候发现了一个现象,b应该是ff ff ff f6 ,a应该是 00 00 00 14,但在内存的表示中是倒过来的,这又是为什么呢?int a = 0x11223344 低位放低地址处——小端字节序存储。低位放在高地址处——大端字节序存储。原创 2023-08-26 12:57:37 · 1095 阅读 · 20 评论 -
程序员必备技能——调试技巧(二)
上文我们提到了许多关于调试的小技巧,接下来我们来应用调试技巧对更多例子进行纠错修整。原创 2023-08-25 11:14:45 · 356 阅读 · 4 评论 -
程序员必备技能——调试技巧
我们可以看到大小是有区别的,原因就是因为Release有优化。当按下F10调试在函数区域时,再按一次F10(当作一条语句)会立刻执行test函数中的语句,如果按下F11就会进入函数内部,如何按下F10依次执行即可。当我们的程序中前面代码过于复杂,不断按F10太久时,可以在想要执行的语句处设置断点,这样在调试时按下F5就可以立马执行完前面的语句来到断点处等待执行。有时候在循环内部次数过多时,我们也可以右击断点设置条件来达到某次循环的位置。原创 2023-08-23 10:01:26 · 674 阅读 · 2 评论 -
初阶结构体
目录一.结构体的声明1.1 结构的基本知识1.2 结构的声明1.3 结构成员的类型编辑1.4 结构体变量的定义和初始化二.结构体成员的访问三.结构体传参 下面代码中的s3与s4是和s1,s2相同的性质,都是结构体类型的变量,唯一不同的是s3,s4是全局变量,s1,s2是局部变量。如果觉得类型太繁琐的话可以用typedef自定义类型名 。原创 2023-08-20 10:34:12 · 256 阅读 · 1 评论 -
C语言——初阶指针
当我们尝试把指向a的变量类型改成char时,a的数据存放发生了变化——只改了4个字节中的一个字节。虽然最后是取到了a的地址,但是函数一结束栈空间就销毁了,那么这跟未初始化一个道理。pp前面加个*,可以找到并修改p,如果再加一个*,那么就是可以找到并修改a。同理*表示pp是指针变量,而int *是说明pp指向的变量的类型是int*。2.指针越界,当访问第11个字节的时候,这是不属于数组的,自然也不能修改。*说明pa是指针变量,int说明pa指向的a的类型是Int。*表示p是指针,而int表示p所指向的类型。原创 2023-08-19 12:10:13 · 321 阅读 · 2 评论 -
C语言操作符详解(二)
三目操作符:举例子:下面是一段正常比大小的代码,接下来可以尝试使用三目操作符来编写。原创 2023-08-18 11:32:13 · 141 阅读 · 2 评论 -
C语言操作符详解(一)
逻辑反操作可以把真变假,假变真。~的用法:在得到(原码,因为为正数)之后进行~按位取反变成补码,因为要打印的是原码,所以补码继续取反+1得到原码,结果为-1~的其他用法 :只需要在该位上把0变1,该如何做到呢?我们可以让a按位或上一个对应位置为1的原码,而如何得到这个原码呢?可以让数字1左移4就行了。那如果我们又想把1变回原来的0又该怎么做呢?我们只需要按位与第四行的序列就行了,而第四行序列恰好是(1<<4)的取反++a:a++:前置与后置--与++是同理的。原创 2023-08-17 15:29:35 · 435 阅读 · 5 评论 -
C语言游戏——扫雷
这里的菜单与前文三字棋是一样的思路,通过(input)输入的值为条件,用switch或if来作分支判断,0为退出,1为开始游戏,其他不符则重新循环。原创 2023-08-09 14:07:17 · 332 阅读 · 14 评论 -
C语言游戏——三字棋
这里我用了switch语句,并给do-while配备input条件,这样就可以达到选择基本逻辑了,当输入0时,条件为0不进入循环,当输入0以外的数字时开始循环。这里有一个问题,在玩家眼中[x][y]与在电脑里是不一样的,当玩家输入1, 1时,电脑其实会让你下在中间位置而不是起始位置。但是有一个问题,当我们把棋盘修改数值时,行数是不变的,但列数却是固定打印3列了。接着是玩家输入的是*,电脑输入的是#。需要注意的是关于游戏相关的函数都在game.h中声明,在game.c中定义,最后在test.c中使用。原创 2023-08-06 20:33:17 · 337 阅读 · 12 评论 -
关于数组的基本要点
但是有两个意外:1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。在这种情况下我们可以把sz的求法放在main函数上,因为传的就是地址,接收的就只能是指针,不管怎么算大小都只能是4,所以只能在主函数求出,经过计算再传回去。其实是因为后续有对数组进行遍历,只要知道首个元素的地址,就可以知道后面的地址了,进而遍历得到整个数组。可以把第一行的数组名看作arr[0],后面的[j]就是一维数组的大小。原创 2023-08-05 22:04:55 · 748 阅读 · 8 评论 -
函数(四)——栈帧创建与销毁
在一个加法函数中,两个寄存器正在维护main函数的栈区。我们经过调试可以知道main函数也是会被调用的,所以可以在栈区底部再开辟两个空间。上面开辟一个调用加法函数的空间,这就是栈区的基本轮廓。原创 2023-08-03 11:21:29 · 149 阅读 · 6 评论 -
函数(三)
正常情况下,如果函数是在主函数main后面定义,那么就需要在前面加上声明。这样才可以使用。如果不想声明,那就在主函数main前面进行定义。在未来工程中,代码是比较多的,所以函数都是会放在.h文件中声明,在.c文件中实现。这就是模块化编程。所以我们先添加2个文件。把函数放置好后,不要忘记在主函数那里调用add.h文件。原创 2023-08-02 21:44:13 · 141 阅读 · 3 评论 -
函数(二)
粗略讲述了关于函数在日常代码中的传值调用与传址调用,链式访问。原创 2023-08-01 09:40:26 · 102 阅读 · 2 评论 -
C语言——函数(一)
关于函数中的地址调用分析原理原创 2023-07-28 21:17:39 · 118 阅读 · 1 评论 -
C语言——猜数字游戏
c语言——猜数字游戏原创 2023-07-28 09:19:17 · 143 阅读 · 1 评论 -
C语言——二分查找
关于用c语言来描述二分查找的代码示例原创 2023-07-27 18:00:59 · 84 阅读 · 1 评论 -
新的开始(一夜鱼)&&(玛丽亚后)&&(c、c++)
关于学习c语言/c++的学习日志原创 2023-06-10 14:14:51 · 229 阅读 · 2 评论