- 博客(61)
- 收藏
- 关注
原创 P41-指针进阶1、2
1.字符指针2.数组指针3.指针数组4.数组传参和指针传参5.函数指针6.函数指针数组7.指向函数指针数组的指针8.回调函数9.指针和数组面试题的解析指针的主题,我们在初级阶段的《指针》章节已经接触过了,我们知道了指针的概念1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。⒉.指针的大小是固定的4/8个字节( 32位平台/64位平台)。3.指针是有类型,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限。4.指针的运算。
2025-03-17 23:13:19
291
原创 P40-浮点型在内存中的存储
常见的浮点数:3.14159浮点数表示的范围:float.h中定义S:正数就是(-1)1。M:M一定属于 [1,2) ,M中小数点前面必然是1,因此1存储在内存中无意义 (如果把1存储进内存反而多占了一位,会降低所保存数字的精度)。其实只需要在内存中保存小数点后面的几位数字即可。E:IEEE规定为E开辟的空间只可以存储无符号整数,但是实际上E却可能是负数,比如0.5。
2024-10-28 22:38:30
904
原创 P37-数据存储
void表示空类型(无类型)通常应用于函数的返回类型、函数的参数、指针类型大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
2024-08-13 21:29:49
366
原创 P34-调试模拟实现字符串相关函数
现在我们编写的my_strcpy和strcpy的区别是返回的类型不同strcpy返回的类型是一个char*,其实返回的就是目标空间的起始地址我们也来模仿实现这个功能。
2024-08-07 20:45:24
320
原创 3.6 上下文菜单
上下文菜单就是常见的右键菜单(弹出式菜单)。如果用户选择了菜单项,返回所选菜单项的ID。如果未选择菜单项或发生错误,返回0。从上图可以看出,使用WM_RBUTTONUP鼠标右键弹起消息来制作右键菜单是不专业的,当然也有方法将客户区坐标系改为屏幕坐标系,这里我们直接讲更好的消息。
2024-08-06 00:41:37
469
原创 P32调试技巧1、2
第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
2024-08-05 23:41:48
933
原创 3.5 菜单资源
LoadMenu函数的主要作用是从与应用程序实例关联的可执行文件(.EXE)中加载指定的菜单资源。在主窗口WM_CREATE消息中利用SetMenu函数设置菜单。1.用户从菜单中选择一个命令项。2.控件向其父窗口发送通知消息。3.加速键(快捷键)被转换时。HIWORD - 对于菜单为0。LOWORD - 菜单项的ID。lPARAM - 对于菜单为0。WM_COMMAND消息。
2024-08-03 19:54:29
308
原创 3.4 定时器消息
定时器消息用于在指定的时间间隔内触发事件,通常通过向窗口发送 WM_TIMER 消息来实现。这使得开发者能够在特定的时间间隔内执行任务,如更新界面、处理动画等。WM_TIMER 是 Windows 操作系统中的一个消息,用于处理定时器事件。这个消息通常在指定的时间间隔内发送给一个窗口,以通知该窗口需要执行定时任务。在程序中创建定时器,当到达时间间隔时,定时器会向程序发送一个WM_TIMER消息。定时器的精度是毫秒,但是准确度很低。例如设置时间间隔为1000ms,但是会在非1000毫秒到达消息。
2024-07-31 21:45:17
208
原创 P28指针初阶1
指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。那这里的问题是︰一个小的单元到底是多大?( 1个字节)如何编址?经过仔细的计算和权衡我们发现一个字节给一个对应的地址是比较合适的。对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的是产生一个电信号正电/负电(1或者0)那么32根地址线产生的地址就会是︰这里就有2的32次方个地址。每个地址标识一个字节,那我们就可以给(232Byte232/1024KB。
2024-07-29 20:50:42
366
原创 3.1消息队列
InvalidateRect函数是Windows编程中的一个重要函数,用于标记窗口的某个区域为“无效”,从而触发重新绘制该区域。消息发送后,首先放入系统队列,再由系统转发到进程队列,然后通过消息循环,从队列当中获取。消息发送后,首先查找消息接收窗口的窗口处理函数,直接调用处理函数,完成消息。WM_QUIT消息是极少数必须进队列的消息,否则程序无法结束进程。非队列消息:消息的发送和获取,是直接调用消息的窗口处理完成。队列消息:消息的发送和获取,都是通过消息队列完成。GetMessage:从队列中获取消息。
2024-07-28 22:11:27
1884
原创 2.5 消息循环的原理
在我们看来,系统中无时无刻不存在消息,但是因为CPU的处理速度非常快,当遇到没有消息时,我们的程序就会经常阻塞。就像上面一样,我们这样写消息循环,效率极低,为了提高效率就有了PeekMessage。
2024-07-25 22:35:38
998
原创 2.4 常见消息
1.释放窗口占用的资源,如内存、GDI 对象等。2.保存应用程序的状态数据,例如用户设置、文档等。3.取消定时器、关闭网络连接等。4.发送 WM_QUIT 消息,通知消息循环程序退出。
2024-07-24 00:27:31
1097
原创 24-扫雷游戏
任何时候写代码都是边写边测,写完一个功能就运行看一下这个功能可不可以正常使用,然后再继续进行下一个功能的编写写完菜单,我们运行看一下,可以看到是没有任何问题的游戏开始之前需要:1.布置雷2.排查雷利用9*9的二维数组设置棋盘如何实现布置雷呢?雷 - 1不是雷 - 0但是这样会有歧义,当一个坐标周围正好只有一个雷时,那这里的1具体是表示的周围有一个雷还是这个就是雷呢?那为了避免这种情况干脆用表示雷,表示不是雷好了这样也有两个缺陷。
2024-07-23 20:27:20
397
原创 23-三子棋
现在我们就定义好了初始化棋盘的函数以及打印棋盘的函数,我们打印出来看一下。但是这个时候还缺少判读输赢的代码,因为在下棋的过程中可能某一方下完就赢了。其中涉及到的判断棋盘满没满的IsFull函数具体细节如下。3的棋盘,那我们改为10,又会打印出什么样的棋盘呢?那么判断输赢的函数就需要能分辨出这四种状态。变量是为了后续方便修改棋盘的大小,此时。多数情况一个项目是由多个人共同完成的。判断胜负函数IsWin具体的细节如下。然后就是玩家下棋的函数的编写。都为3,也成功打印出来3。然后是电脑下棋的函数。
2024-07-22 21:37:14
315
原创 23-数组作为函数参数
将 9 8 7 6 5 4 3 2 1 0 按升序排列思路:先两两相邻的比较,最终结果会将最大的9挪到最右边然后继续相邻的元素进行比较交换以此往复10个数组 - 9趟n n-110个数字就有9对比较9个数组就有8对比较以此类推进行调试排查。
2024-07-22 21:36:23
308
原创 22-二维数组
因为在内存中是连续存放的,所以只要知道第一个就能很容易找到后续的,如果乱放的就找不到了。二维数组中的元素也是通过使用下标(即数组的行索引和列索引)来访问的。还有这种情况,一行一行的给它值。
2024-07-21 14:20:53
271
原创 21-一维数组
1.数组是使用下标来访问的,下标从0开始2.数组的大小可以通过计算得到1.一维数组在内存中是连续存放的2.随着数组下标的增长,地址是由低到高变化的因为在内存中是连续存放的,所以只要知道第一个就能很容易找到后续的,如果乱放的就找不到了。
2024-07-21 14:20:21
305
原创 2.2 窗口创建
首先了解一下创建窗口的API,CreateWindow以及CreateWindowEx。CreateWindow函数是Windows API中一个非常重要的函数,用于创建一个新的窗口。该函数返回一个HWND类型的值,代表新创建窗口的句柄。如果创建失败,返回NULL。CreateWindowEx与CreateWindow函数相比只是增加了更多的窗口样式选项。
2024-07-19 21:09:18
1052
原创 20-P55函数作业讲解2
写一个递归函数Digitsum(n),输入一个非负整数,返回组成它的数字之和例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。编写一个函数实现n的k次方,使用递H实现。输入:1729,输出 : 19。
2024-07-19 19:54:15
137
原创 19-P53函数作业讲解1
A.函数的定义必须放在函数的使用之前B.函数必须保证先声明后使用C.函数定义在使用之后,也可以不声明D.函数的声明就是说明函数是怎么实现的。
2024-07-19 19:53:44
814
原创 2.1 注册窗口类
它定义了窗口的基本结构和功能,包括以下几个方面:1.窗口的基本属性:2.窗口的外观:3.窗口的交互行为:4.窗口的事件处理:系统已经定义好的窗口类,所有应用程序都可以直接使用。由用户自己定义,当前应用程序所有模块都可以使用。由用户自己定义,当前应用程序中本模块可以使用,不需要注册,直接使用窗口类即可。系统以及注册好了例如:按钮 - BUTTON编辑框 - EDIT新建一个WinSys项目,修改字符编码为”多字节字符集“,子系统设置为"窗口"然后将之前的WinBase项目的内容copy过来这就是直
2024-07-18 01:36:01
722
原创 18-函数
自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,无关紧要。2.函数的声明一般出现在函数的使用之前。要满足先声明后使用。3.函数的声明一般要放在头文件中的。函数的定义是指函数的具体实现,交代函数的功能实现程序调用自身的编程技巧称为递归(recursion )。递归做为一种算法在程序设计语言中广泛应用。
2024-07-18 00:22:46
2168
原创 17-goto语句
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。从理论上goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。C语言中提供了可以随意滥用的goto语句和标记跳转的标号。goto语句只能在一个函数范围内跳转,不能跨函数。这里的goto语句不好,怎么写可以不用它呢?识别不到别的函数的goto语句。
2024-07-18 00:20:46
243
原创 16-P38分支循环作业讲解
通过F10可以看的跟只直观在if(i = 5)时,i的值为0过了printf后,i的值为5,屏幕上也打印了一个5然后循环再上来,i++以后i的值变成6然后再走,经过赋值,i变为5然后一直就是这个过程。
2024-07-18 00:20:15
226
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人