C语言
文章平均质量分 73
闪电无敌雷霆霹雳爆炸猿
这个作者很懒,什么都没留下…
展开
-
程序环境和预处理
_FILE__ //进行编译的源文件 __LINE__ //文件当前的行号__DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是语言内置的。#define reg register //为 register这个关键字,创建一个简短的名字;) //用更形象的符号来替换一种实现。原创 2023-08-23 16:43:25 · 39 阅读 · 0 评论 -
C语言——数据在内存中的存储
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。字节序:一个字节一个字节的进行存储,在计算机中,我们以字节为单位,一个地址对应一个字节其实大端即为内存中存放顺序和我们习惯所见的顺序相同,如1表示为00 00 00 01,若这样存储在计算中,则表示大端。为什么会有大小端模式之分呢?原创 2023-07-24 16:15:15 · 150 阅读 · 0 评论 -
函数栈帧的创建和销毁
3.main函数也是被其他函数所调用,_tmainCRTStartUp调用,所以调用main函数,首先要push ebp,压栈,将原来函数的ebp存放起来,把它存放到当前栈顶,esp的值就会往上增长一点,再将esp的值给(mov)ebp, 再将esp的值减去oe4h,esp就会往上走,这就为main函数开启堆栈,再为顶上压栈ebx,esi,edi,把edi往下的部分空间初始化为cccc,即为将栈区所有的内存值初始化。再把eax的值放到ebp-20的位置,c的值就变成20.原创 2023-06-01 16:17:40 · 34 阅读 · 0 评论 -
C语言简易扫雷游戏
写代码之前要思考整个程序的逻辑,同时需要思考程序需要用到什么,可能遇到什么问题。这个函数中,玩家输入排雷的坐标,检查坐标是否合法,若非法则提示玩家重新输入,若该坐标的mine数组对应位置为‘1’,即为有雷,玩家被炸死,退出,若为0,则将该位置show数组的值改为周围3*3的地方所拥有雷的数量,同时排雷位置-1,当所有没有雷的地方都被找到之后,显示玩家胜利,游戏结束。这个函数的逻辑与三子棋的main函数相同,先打印菜单,定义一个input接收输入,输入1 表明继续游戏进入我们的game函数。原创 2023-06-01 16:45:22 · 35 阅读 · 0 评论 -
C语言文件操作
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。原创 2023-08-21 16:48:48 · 41 阅读 · 1 评论 -
C语言指针
数组指针是指针?还是数组?答案是:指针。我们已经熟悉: 整形指针int * pint;能够指向整形数据的指针。浮点型指针: float * pf;能够指向浮点型数据的指针。能够指向数组的指针。定义这里p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指 向一个数组,叫数组指针。这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。原创 2023-08-02 20:53:20 · 99 阅读 · 0 评论 -
C语言字符串
1.字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。2.参数指向的字符串必须要以 '\0' 结束。3.注意函数的返回值为size_t,是无符号的int main()elsereturn 0;这里str1的长度是6,str2的长度是3,但是是无符号数,无符号数相减结果是大于等于0的,所以输出“str2>str1".4.strlen函数的模拟实现count++;assert(str!= NULL);原创 2023-08-16 17:23:49 · 46 阅读 · 1 评论 -
C语言三子棋小游戏
这是一个简单的三子棋游戏。需要注意的点为:1.用一个字符二维数组代表棋盘,玩家或者电脑落子存在该数组中。2.打印棋盘函数,想要打印出一个好看的棋盘,首先要观察棋盘如何组成。同时什么情况下需要添加分割线 |。3.玩家或电脑落子时需要判断,该落子位置是否合法。4.取胜函数。每次落子均需判断游戏是否结束,并将flag改变,结束棋局循环。同时判断和棋时,棋盘是否满,可以判断如果有一个位置为“ ”,则return,如果顺利结束循环,则表示棋盘已满。注意这里break只会跳出一个循环,只能使用return。原创 2023-05-22 21:18:10 · 42 阅读 · 1 评论 -
C语言内存函数
函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。这个函数在遇到 '\0' 的时候并不会停下来。它只负责内存互不相干的区域进行拷贝,如果source和destination有任何的重叠,复制的结果都是未定义的。原创 2023-08-17 17:14:10 · 48 阅读 · 1 评论 -
自定义类型:结构体,枚举,联合
int x;int y;}p1;//声明类型的同时定义变量p1 这里时全局变量//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化//结构体嵌套初始化结构体变量在定义时可直接初始化,后面用.或者->进行访问结构体成员。1.6 结构体内存对齐现在我们讨论一个问题:如何计算结构体的大小。原创 2023-08-18 16:39:27 · 44 阅读 · 1 评论 -
动态内存分配
这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。free函数用来释放动态开辟的内存。如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。原创 2023-08-20 11:02:23 · 46 阅读 · 1 评论 -
初识C语言01
getchar();它是一个 集成开发环境,具备编辑,编译,链接,运行,调试的功能,ctrl+F5可以直接完成前面三项,同时Fn+F10,可以一步步调试,不进入函数,Fn+F11可以进入函数一步步运行,同时可在下方窗口中看到具体的变量值。(2)变量命名规则,变量名,函数名,自定义类型名(typedef或者struct)均是标识符,由数字,字母下划线组成,不能以数字开头,区分大小写,不能与关键字重名,忽略63个以后的字符。同时在嵌套的if语句中,会出现“悬空的else”问题,需要我们以正确的方式进行缩进。原创 2023-04-20 17:40:00 · 60 阅读 · 1 评论 -
C语言指针练习题
p不过是以16进制打印该数字(八位,不足前面补0),指针的加减跳过一个元素,因此结果为0x00100020,0x00100001,0x00100004。下面这种涉及字符串与多级指针题目,画图求解,同时注意cpp[-1][-1]这种可以写成*(*(cpp-1)-1)的形式。两个指针值(地址值)相减,得到的是它们之间相差的元素个数,%p打印是以16进制打印。原创 2023-08-07 10:07:13 · 40 阅读 · 0 评论 -
初识C语言-01HelloWorld
C语言Hello World原创 2023-03-02 19:43:13 · 79 阅读 · 0 评论