C语言相关概念和易错语法
文章平均质量分 89
涵盖循环、函数、操作符、指针、字符串函数、结构体、枚举、文件操作,最后还有扫雷和贪吃蛇的小练习分享
-SGlow-
这个作者很懒,什么都没留下…
展开
-
C语言相关概念和易错语法(1)
这段代码很有意思,可以帮助我们理解\0和printf,我第一次只想打印arr1,但你仔细看就发现在一堆“烫”的乱码后跟着arr2的字符,说明printf不遇到\0就不会停,会一直访问内存并打印,在这里printf一直访问到我创建的arr2后面隐藏的的\0才停下来。其次,这些知识点是从我自己的角度出发整理的,因此我认为的重点可能和你不同,有的内容可能不完整或有错误,希望大家多多包涵,如果能指出我的错误,我会非常感激!\xyy:这里yy表示十六进制数字,前面的x是十六进制的标志,必须写,如\xa表示10。原创 2023-10-29 21:03:51 · 123 阅读 · 3 评论 -
C语言相关概念和易错语法(2)
其次,这些知识点是从我自己的角度出发整理的,因此我认为的重点可能和你不同,有的内容可能不完整或有错误,希望大家多多包涵,如果能指出我的错误,我会非常感激!如果不做任何处理,后续打印的数字会无法对齐,因此使用printf("%3d")或printf("%-3d"),3表示最小位宽,使打印的数字右对齐或左对齐,默认右对齐,前面加上负号变成左对齐。每根地址线能够表示0和1,因此总共能储存2的64或32次方个地址。严格来说,我们所说的指针是指针变量,真正的指针其实是地址,因此我们要区分日常用语和概念的定义的区别!原创 2023-11-07 22:29:29 · 481 阅读 · 0 评论 -
C语言相关概念和易错语法(3)(操作符)
其次,这些知识点是从我自己的角度出发整理的,因此我认为的重点可能和你不同,有的内容可能不完整或有错误,希望大家多多包涵,如果能指出我的错误,我会非常感激!有符号数的整型提升是按符号位提升,因此负数的整型提升补的全是1而不是0,char也有有无符号之分,但默认是不是有符号char得看系统,这个标准没有被定义。char中也可以存储数字,字符也是属于整型家族的,可以进行整型运算,只是能存储的大小很有限,你可以把它理解成更短的整型,取值是-128~127。(2)算数右移:左边用该值的原符号位填充,右边丢弃。原创 2023-11-10 12:57:08 · 175 阅读 · 1 评论 -
C语言相关概念和易错语法(4)(指针)
b和c是int类型,b+c也是int类型,int数据放到short里面发生截断,最终表达式是short类型,起决定性的是等号左边的变量的类型,sizeof计算的就是short的大小。(这里有点绕,需要好好消化)二维数组本质上是以一维数组为元素的数组,所以二维数组传参传的就是一维数组的地址(首元素地址),创建 int arr[3][4]就用int(*p)[4](数组指针)来接收,p每加1就跳一行4个元素,如果要读取某一行的具体的某个元素,就需要先对p解引用得到一行p元素的地址,再解引用得到单个元素的地址。原创 2023-11-24 10:09:48 · 872 阅读 · 2 评论 -
C语言相关概念和易错语法(5)
用一种简单不混淆的话来说,放入成员变量时,截至要研究的地址处结构体占用的字节大小就是偏移量大小,在完全不放数据时,偏移量为0,放入一个char的数据后,char末尾处偏移量为1,但称这个char放在0偏移处,因为char的起始位置位于偏移量为0的位置。注意i在重复使用,这两个i的生命周期都一样,从程序开始到程序结束,但这两次出现的i的作用域不同,由struct创建的i相当于全局变量,整个程序都能使用,但后面struct内部的i作用域只能在括号{}内使用,因此它们不会相互影响。栈区用于创建临时变量,函数等。原创 2023-12-07 00:14:04 · 1091 阅读 · 2 评论 -
C语言相关概念和易错语法(6)(字符串函数)
这个错误信息是我自己设置的,因此打印的时候就会显示我设置的错误码对应的信息,在我们使用的库函数的内部,都会有这样一个操作,在当库函数执行异常时修改errno的值,以供程序员参考。值得注意的是,errno存在覆盖现象,所以要注意及时使用。需要注意的是,while括号内部的表达式都会正常执行,执行之后的返回值作为while评判的值,如果为0(假)就停止,这里当读到最后一个\0时,表达式先执行,所以arr1中的\0成功被赋给arr2,然后表达式返回0被判为假,跳出循环。原创 2024-01-04 23:23:36 · 895 阅读 · 1 评论 -
C语言相关概念和易错语法(7)
由于char 只有8个bit位的存储空间,所以它最多能表示256个数字(包含0),但在signed char中,由于存在原反补的存储规则,导致01111111是最大的正数,对应过来是127,如果再加,就会是10000000,除符号位按位取反+1得到1 00000000,截断后本应是0,但这和0000000冲突了,也就是说0会出现两次,因此规定在这种情况下,127+1 = -128。(2)有效数字,一般情况下,科学计数法的有效数字都是1.xxxx形式,所以自动忽略1,回算时再主动添加上去,原创 2024-01-13 09:34:22 · 2088 阅读 · 1 评论 -
C语言相关概念和易错语法(8)(预处理、编译、链接)
第二种是"xxx.h",先在我们所写的.c文件的同级目录下找是否有相应的头文件,如果没有,再到标准库里去找,再没有就报错。在指针的章节我就分享过:*在不同的地方应该有不同的理解,有的时候int*要合在一起理解,有的时候要拆开随着变量作为一个整体去理解。编译生成的是.s文件,它主要是将我们写的代码进行进一步检查(词法,语法,语义等分析),词法语法问题会在这个阶段被发现。具体处理方法是删去没必要的(如#if判断为假的代码块和注释),展开引用的头文件,生成.i文件,.i文件的内容还是C语言,我们依然能够看懂。原创 2024-01-22 23:57:32 · 849 阅读 · 2 评论 -
C语言相关概念和易错语法(9)
= 4,而a = (2 + 2, a * 5, a + 10, 4 + 5) 表达式的值是9, a == 9。4.含++,--的表达式的值取决于++或--的位置,前置则先执行++,--操作,再返回值;,而char arr[10] = 'H'不可行,因为'H'表达式的值是H的ASCII码值而不是地址。也可防止在解读代码时先入为主,如 1原创 2024-02-23 13:03:25 · 878 阅读 · 1 评论 -
C语言扫雷初步实现、思路
其中,因为只有81个格子,所以在被雷炸死时,我返回82,在没被雷炸死时,我以剩余格子数为信息返回,再由游戏主函数的分支语句判定是break还是继续循环,在arr_me和arr_show进行转换时,注意字符和数字要用'0'来转化,如'9' == 9 + '0',同样地,4 == '4' - '0'。兼顾(1)(3)要防止判定越界问题,即在边角对周围8个格子统计雷的个数时,不能超出数组的范围,所以在9*9的棋盘上游戏时,我们需要11*11的数组,隐藏最外层。其中,时间种子是我后加上去的,开始的时候可以不管它。原创 2023-11-05 13:51:06 · 170 阅读 · 2 评论 -
C语言贪吃蛇初步实现、思路
在相应状态下,蛇进行相应的操作,只有按下改变方向的按键,蛇的状态就会被改变。同时,或许我们还会注意到我这个函数传了Score_All, Score_Per这两个参数,这是因为蛇可以加速或减速,针对不同的速度有不同的分数,传过来这两个参数并在地图上展示出来,让玩家能实时看到自己的单个食物得分、总分。首先我们要知道一个光标格子是矩形,水平方向x坐标间距离是竖直方向y的一半,因此要打印一个正方形的地图需要自己算清楚横坐标和纵坐标的界限,以及你打算打印的墙的层数,x轴建议都以偶数为基本单位,否则会出现错位的现象。原创 2024-02-04 15:59:37 · 530 阅读 · 2 评论