![](https://i-blog.csdnimg.cn/direct/3c298635cc944467a85c6b268e0dc5a4.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言知识点的补充
文章平均质量分 82
1,补充C语言系统性学习栏目的边边角角
2,提取C语言系统性学习栏目的重点难点
Jason_from_China
非心静无以事明,非心坚无以事破
展开
-
代码本地化
1. **文本替换**:将所有的硬编码文本(如字符串变量)替换为资源字符串,这样可以在不同的语言版本中轻松地更改它们。7. **文化适应性**:考虑到不同文化之间的差异,可能需要对某些功能或设计进行调整,以更好地适应目标市场的用户习惯。3. **用户界面元素**:确保用户界面元素(如菜单、按钮、对话框)可以适应不同的语言和方向(如从右至左的语言)。5. **图像和内容**:确保图形和媒体内容在不同的文化背景下都是恰当的,并且不具有文化敏感性。通过修改地区,程序可以改变它的⾏为来适应世界的不同区域。原创 2024-05-06 22:57:38 · 299 阅读 · 0 评论 -
设置定位坐标+请按任意键继续
在编程和游戏开发中,设置定位坐标的目的是为了确定对象在屏幕或游戏世界中的具体位置。我们可以看到定位光标的位置还是比较简单的,只需要句柄参数和COOR参数,什么意思呢也就是,我们主需要获得句柄,定义一个结构体位置信息,就可以定位光标的位置。在游戏或动画中,对象的移动是通过不断更新其坐标来实现的。通过坐标,开发者可以精确地控制游戏对象(如角色、道具、障碍物等)在屏幕上的位置,从而创建精确的游戏场景和布局。总之,设置定位坐标是编程和游戏开发中的一个基本概念,它允许开发者创建动态、交互式和有组织的视觉体验。原创 2024-05-06 22:35:20 · 452 阅读 · 0 评论 -
虚拟键代码
虚拟键代码虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn在Windows操作系统中,虚拟键代码(Virtual-Key Codes)是一组用来表示键盘上按键的数值。这些代码通常用于Windows API函数,以便程序能够识别和处理键盘输入。虚拟键代码是按键的物理位置定义的,而不是按字符本身定义的。这意味着,无论用户的键盘布局如何,同一物理按键的虚拟键代码都是相同的。例如,无论用户使用的是美式键盘、德式键盘还是日式键盘,字母 'A' 键的虚原创 2024-05-06 22:34:16 · 776 阅读 · 0 评论 -
C语言-设置控制台信息
Win_API是Windows应用程序接口(Windows Application Programming Interface)的缩写,它是一组函数、系统服务和程序接口,允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分,它为Windows应用程序提供了一系列的函数调用,这些函数可以用来执行各种任务,比如创建和管理窗口、处理用户输入、绘制图形、访问文件系统、网络通信等。原创 2024-05-06 21:10:13 · 625 阅读 · 2 评论 -
C语言-二分查找
这个分支实际上永远不会执行,因为前面已经覆盖了所有可能的情况。:开始一个循环,只要左边界不大于右边界,循环就会继续。:通过标准输入读取用户输入的整数,并将其存储在变量。:包含标准输入输出库,用于程序中的输入输出操作。:如果循环结束时没有找到目标值,打印这条消息。:如果找到目标值,打印其在数组中的下标。,则找到了目标值,打印下标并退出循环。在有序的数字里,查找某一个数字。,并初始化为1到30的整数。,用于存储用户输入的值。的长度,即元素的总数。作为二分查找的左边界。作为二分查找的右边界。原创 2024-04-21 18:12:02 · 1176 阅读 · 0 评论 -
C语言-rand+srand+time的使用
【代码】C语言-rand+srand+time的使用。原创 2024-04-20 14:27:50 · 445 阅读 · 0 评论 -
结构体-前置声明
在这个例子中,我们首先前置声明了`struct A`和`struct B`,然后定义了`struct A`,在`struct A`的定义中使用了`struct B*`。之后,我们定义了`struct B`,在`struct B`的定义中使用了`struct A*`。这种情况下,`struct A`和`struct B`的定义是可以互相引用的。如果我们改变了结构体的名字,比如将`struct A`改为`struct NewA`,那么在结构体被完整定义之前,我们必须使用新的名字`struct NewA`。原创 2024-04-08 10:11:11 · 349 阅读 · 0 评论 -
Visual Studio 2022-C语言如何防止头文件多次引入
”双引号 先去文件找,找不到去标准头文件里面去找(范围较大)直接去标准库文件里面去查找分开定义的目的是效率比较高。原创 2024-04-08 01:30:00 · 848 阅读 · 0 评论 -
C语言--条件编译(常见的编译指令)
如果没有定义#define max 那就不打印如果定义了#define max 那就打印// 如果 MAX 已经被定义,则执行这里的代码#endif#if!// 如果 MAX 未定义,则执行这里的代码#endif在宏定义里面,我们有时候会定义的文件过多导致不知道宏是否已经定义了。所以我们可以·#ifdef(定义了宏 )+#endif(结束)#ifndef(没有定义宏则继续运行)+#endif(结束)- `#ifdef` 检查是否定义了某个宏,如果定义了,则编译后续的代码块。原创 2024-04-08 03:30:00 · 1338 阅读 · 0 评论 -
C语言--#运算符和##运算符
使用`#define`指令来定义宏,这可以在程序中替换为其他文本。原创 2024-04-08 01:45:00 · 759 阅读 · 0 评论 -
C语言——#define的使用
提高代码可读性: 常量可以帮助开发者理解代码的含义。例如,使用常量MAX_USERS比 使用数字100更能表达一个变量应该表示的最大用户数。便于维护: 如果一个值在程序中多次使用,比如一个应用的版本号,将其定义为常量(如VERSION)可以使得未来的更新更加容易。你只需要改变常量的定义,而不是每一个出现该值的地方。避免魔法数: 魔法数(Magic Numbers)是指在代码中直接出现的、没有解释的数字。使用常量代替魔法数可以增加代码的可读性和可维护性。配置管理。原创 2024-04-06 21:05:51 · 1044 阅读 · 0 评论 -
#define定义宏
我们这里看一下预处理如果想变成36 我们可以加上括号所以可以书写乘((x)*(X))这样 书写宏的时候不要吝啬括号所以。原创 2024-04-06 20:21:08 · 732 阅读 · 0 评论 -
#define定义常量
提高代码可读性: 常量可以帮助开发者理解代码的含义。例如,使用常量MAX_USERS比 使用数字100更能表达一个变量应该表示的最大用户数。便于维护: 如果一个值在程序中多次使用,比如一个应用的版本号,将其定义为常量(如VERSION)可以使得未来的更新更加容易。你只需要改变常量的定义,而不是每一个出现该值的地方。避免魔法数: 魔法数(Magic Numbers)是指在代码中直接出现的、没有解释的数字。使用常量代替魔法数可以增加代码的可读性和可维护性。配置管理。原创 2024-04-06 20:21:06 · 1005 阅读 · 0 评论 -
C语言-预定义符号
C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。__FILE__ //进⾏编译的源⽂件__LINE__ //⽂件当前的⾏号__DATE__ //⽂件被编译的⽇期__TIME__ //⽂件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义。原创 2024-04-06 20:12:23 · 689 阅读 · 0 评论 -
C语言-写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。原创 2024-03-30 18:51:55 · 377 阅读 · 0 评论 -
C语言-文件操作函数进阶+printf+scanf+sscanf+sprintf+fprintf+fscanf+fwrite+fread+fseek+ftell+rewind+feof
这里说明一下,printf和scanf经常使用,就不详细举例,直接进行说明。在C语言中,printf、fprintf、sprintf、scanf、sscanf和fscanf是用于输入和输出数据的函数。printfprintf函数用于将格式化的数据输出到标准输出(通常是终端或控制台)。它不会在输出字符串的末尾添加换行符,所以如果需要换行,需要在格式字符串中显式包含\n。示例:printf("Hello, World!\n"fprintf。原创 2024-04-03 03:00:00 · 774 阅读 · 0 评论 -
C语言-printf和scanf的区别详解
这里说明一下,printf和scanf经常使用,就不详细举例,直接进行说明。在C语言中,printf、fprintf、sprintf、scanf、sscanf和fscanf是用于输入和输出数据的函数。printfprintf函数用于将格式化的数据输出到标准输出(通常是终端或控制台)。它不会在输出字符串的末尾添加换行符,所以如果需要换行,需要在格式字符串中显式包含\n。示例:printf("Hello, World!\n"fprintf。原创 2024-03-29 20:33:07 · 1051 阅读 · 0 评论 -
C语言-文件操作函数基础fgetc(读字符),fputc(写字符),fgets(读文本),fputs(写文本),fclose(关闭文件),fopen(打开文件)
fopen` 函数用于打开一个文件,并返回一个指向该文件的指针。如果打开文件失败,`fopen` 会返回 `NULL`。```c```参数:- `path`: 要打开的文件的路径。- `mode`: 文件的打开模式(例如:`"r"` 读取模式,`"w"` 写入模式,`"a"` 追加模式等)。如果成功,返回一个指向 `FILE` 对象的指针。如果失败,返回 `NULL`。`fclose` 函数用于关闭由 `fopen` 函数打开的文件。原创 2024-04-01 06:00:00 · 990 阅读 · 0 评论 -
C语言-atoi函数的模拟
4 如果转换之后的数字大于最大值那么按照最大值算,如果比最小值还小 那么按照最小值计算。3,只会过滤开始的 空格 中间遇见任何不是数值的东西 都会直接结束循环。这个是isdigit进行函数判断 也就是 判断是不是数字字符。因为这里的逻辑是 刚开始的时候 从空格外进行计算。这里判断是不是空格的函数 空格就进行++所以返回的是一个整体的数字 而不是分开的。也就是 返回的是一个整体 不是一个一个。这里进行解释 是因为返回的是一个整数。这里可以使用枚举 进行一个判断。作用 判断传进来的是不是空格。原创 2024-04-02 03:45:00 · 602 阅读 · 0 评论 -
类型在内存中的存储范围
这里只是一个字节,一个字节也就是8bit位,也就是11111111->换算成二进制的最大最小值。1的补码是全11111111111111111111111111111111。整形打印不满足32位 要进行整形提升。这这里推荐不理解的可以看这一篇文章。数据在内存里面的存储-CSDN博客。所以这里的取值范围是0-255。所以 我们画个图可以理解为。对于无符号 没有正负之分。无符号char类型举例。原创 2024-03-28 10:45:08 · 555 阅读 · 0 评论 -
柔性数组详细讲解
int arr[];//sizeof(struct s):这个表达式计算了 struct s 类型的大小。// 这包括了 struct s 中所有字段的大小,但不包括动态分配的数组 arr 的大小,// 因为数组的大小取决于它所包含的元素的数量。// struct s 中的 int i 字段占用4个字节(在大多数现代平台上是这样),// 而 int arr[] 是一个未指定大小的数组,所以我们不知道它占用的空间。原创 2024-04-02 05:45:00 · 708 阅读 · 0 评论 -
内存的划分-图片两张
原创 2024-04-03 04:15:00 · 107 阅读 · 0 评论 -
动态内存函数的使用和综合实践-malloc,free,realloc,calloc
动态内存是指在程序运行过程中可以被分配和释放的内存空间。这与静态内存分配相对,静态内存分配是在程序编译时就已经确定的内存空间,其大小在程序运行期间固定不变。在许多编程语言中,特别是在C语言中,动态内存管理是通过一系列标准库函数来实现的,如`malloc()`、`calloc()`、`realloc()`和`free()`。这些函数提供了在程序运行时请求和释放内存的能力。动态内存的分配通常发生在堆(Heap)区域,这是程序内存空间的一个部分,用于存储动态分配的内存。原创 2024-03-27 13:44:16 · 946 阅读 · 0 评论 -
C语言-realloc函数的使用
realloc` 可以调整内存块的大小,如果新的大小比原来小,那么内存块可能会被移动。`realloc` 返回一个指向调整大小后的内存块的指针。如果调整大小失败,则返回 `NULL`。在使用这些函数时,应当总是检查返回的指针是否为 `NULL`,以避免潜在的空指针引用错误。并且在使用 `calloc` 或 `realloc` 分配的内存后,应当在不再需要时使用 `free` 函数来释放内存,以避免内存泄露。如果 `ptr` 为 `NULL`,那么 `realloc` 行为与 `malloc` 相同。原创 2024-04-04 05:30:00 · 1030 阅读 · 0 评论 -
C语言- calloc(申请空间初始化)
calloc函数其实和malloc函数本质都是一样的唯一不一样就是,calloc函数在开辟空间的时候会进行初始化,当然 calloc函数初始化,那运行速度也会比malloc慢一点。在C语言中,`calloc` 和 `realloc` 是用于动态内存分配的两个函数。`calloc` 返回一个指向分配内存的指针。如果分配失败,则返回 `NULL`。这里我们可以看到和malloc一模一样,只是换了一下函数,其他是没有变化的。- `size`: 每个块的大小(以字节为单位)。- `num`: 分配块的数量。原创 2024-03-30 13:12:57 · 209 阅读 · 2 评论 -
C语言-malloc(申请函数)free(释放函数)
`malloc` 函数是 C 语言标准库中的一个重要函数,用于动态分配内存。其语法如下:这里的 `void *` 表示返回的是一个 `void` 类型的指针,实际上这个指针指向的是一个 `char` 类型的内存块。`size_t` 是一个无符号整数类型,用于指定分配的内存大小。当你调用 `malloc` 函数时,你需要提供一个参数 `size`,表示你需要分配的内存的大小(以字节为单位)。函数返回一个指针,指向为你分配的内存区域的开始位置。如果分配成功,这个指针不会是 `NULL`;如果分配失败(原创 2024-04-01 03:15:00 · 766 阅读 · 0 评论 -
动态内存管理-错题合集讲解
首先我们上一个代码,看看这个的代码的问题 这个代码的问题显而易见 ,就是在循环里面,产生了越界访问的问题,这里你开辟了10个整形空间,但是从0-10一共是11个整形空间。导致访问不合法的空间,从而导致内存泄露,内存泄露会导致,这个内存一直使用,逐步积累,从而导致内存呗占满。 ——————————————————————————————————————————上面的重点我们说的很清楚,为什么不能让指针移动 这里我们写上一个代码指针移动之后 你指的是静态的空间,我们的是什么,我们的函数的动态内存空间的管理。这里原创 2024-04-01 05:00:00 · 1022 阅读 · 0 评论 -
动态内存操作函数使用过程中会遇见的问题
一个常用的做法是,在每次调用`malloc`或`realloc`时,都记录下返回的指针,然后在`free`中检查是否是同一个指针,避免重复释放。首先我们看代码逻辑,首先main函数调用test,test接收的是void类型,设置一个指针变量,指向null,传递给get函数,也就是传递一个空指针给getmemory函数,这个函数接收了,然后进行运算。1.谁申请是谁释放------------------malloc free成对出现 --不然就会导致内存泄露的问题 --即使成对出现 也会导致泄露问题。原创 2024-03-28 04:30:00 · 870 阅读 · 0 评论 -
动态内存管理-传值调用错题解析
首先我们看代码逻辑,首先main函数调用test,test接收的是void类型,设置一个指针变量,指向null,传递给get函数,也就是传递一个空指针给getmemory函数,这个函数接收了,然后进行运算。找个数值进行接收,找个数值进行接收,那就是有返回类型,我们采取的返回类型是char*类型,因为这里是拷贝字符串。接收返回值也是一样的。已经是指针,我们采取用二级指针的方式进行接收,也就是指向的是指针的地址,我们可以把str取地址,传参传的是地址,然后因为本身st。提示一下,所以其实不传参也是可以的。原创 2024-03-26 11:29:49 · 431 阅读 · 0 评论 -
结构体内存对齐+枚举+内存开辟+文件操作的专用题型
———————————————————————————————————————————原创 2024-03-25 12:07:13 · 223 阅读 · 0 评论 -
位段详细解释
这里,`位段名`是结构体的名称,`位段1`到`位段N`是结构体中的位段名称,`宽度`是指定每个位段占据的位数。在这个例子中,`RGB` 结构体有三个位段:`red`、`green` 和 `blue`。位段的访问可以通过位运算符来进行,例如`&`(按位与),`|`(按位或),`^`(按位异或),`~`(按位取反),``(右移)等。首先我们知道位段的使用是在内存里面的分配是字节和字节之间是从低地址到高地址,也就是字节之间的存储是从左到右。这里是长度不够的时候申请一个字节的长度。原创 2024-03-26 03:30:00 · 1113 阅读 · 0 评论 -
结构体的内存对齐(重点)
结构体的内存对齐是指在计算机编程中,编译器按照一定的规则对结构体中的数据成员在内存中的存放位置进行调整,以确保数据成员的地址满足特定的对齐要求。这种对齐不是指数据类型本身的大小,而是指数据在内存中的位置对齐到某个边界,通常是数据大小的倍数。内存对齐的目的是为了提高内存访问的效率。许多处理器在访问非对齐的数据时会有性能损失,甚至可能不支持非对齐访问。每个数据成员都会根据其类型的大小和对齐要求进行对齐。例如,如果一个int类型的大小是4字节,那么这个int变量就会放置在4字节的边界上。原创 2024-03-25 10:01:32 · 1060 阅读 · 0 评论 -
枚举的详解
在C语言中,没有内置的枚举(enum)数据类型,但我们可以使用整数类型来模拟枚举的行为。C99标准之前,C语言使用`#define`指令来定义枚举,但这种方式并不安全,因为如果枚举值发生变化,可能需要在代码中到处修改。C99标准引入了枚举类型,提供了更安全和方便的方式来定义和使用枚举。下面是C99标准中枚举的基本使用示例:在这个例子中,我们定义了一个名为`color`的枚举类型,它有三个成员:`RED`、`GREEN`和`BLUE`。这些成员被自动赋予整数值,`RED`通常是0,`GREEN`是1原创 2024-03-25 00:08:10 · 851 阅读 · 0 评论 -
结构体初阶 知识点的补充(初始化,typedef,访问,声明,传参,类型,调用)
在实际编程中,通常根据是否需要修改原始数据来选择使用传值还是传址。如果函数需要修改结构体数据,或者结构体较大,为了节省内存和提高效率,通常使用传址方式。如果函数只是读取结构体数据,而不进行修改,使用传值方式即可。原因函数传参的时候 参数压栈 参数过大的时候 压栈就过大 不仅浪费空间 而且浪费时间如果直接传递地址过去 无非就是四个或者八个字节 只要有一个指针大小的空间就够了。原创 2024-03-05 14:45:53 · 1066 阅读 · 8 评论 -
浮点数在内存中的存储
在计算机内部进行浮点运算时,首先要对存储的浮点数进行解码,然后进行相应的数学运算,最后将结果重新规格化并编码存储。这个过程体现了计算机在处理浮点数时的高效性和统一性,使得不同计算机系统和编程语言能够在浮点数的表示和处理上实现兼容和通用。5.5的二进制 101.1。原创 2024-03-27 05:30:00 · 1137 阅读 · 0 评论 -
大小端字节序和字节序的判断+有符号整形和无符号整形的取值范围
大小端(Big-Endian 和 Little-Endian)是指计算机系统中多字节数据类型的存储顺序。这种存储方式影响数据的读取和写入,特别是对于有符号整数和浮点数的字节顺序。1. 大端- 在大端字节存储方式中,数据的高位字节(Most Significant Byte,MSB)存储在内存的低地址端,而低位字节(Least Significant Byte,LSB)存储在内存的高地址端。原创 2024-03-26 06:15:00 · 1215 阅读 · 0 评论 -
整数在内存里面的存储
例如,在C语言中,short通常占用2个字节(16位),int通常占用4个字节(32位),long在某些平台上是4个字节,在64位系统上可能是8个字节。在小端格式中,最小的字节存储在地址最低的位置,而在大端格式中,最大的字节存储在最低地址。三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,剩余的都是数值位。1. 整数在内存中的存储在讲解操作符的时候,我们就讲过了下⾯的内容:整数的2进制表⽰⽅法有三种,即原码、反码和补码。原创 2024-03-28 06:00:00 · 688 阅读 · 0 评论 -
C语言-memcmp(内存块的比较)
在上面的例子中,我们定义了三个字符串,分别比较`str1`和`str2`,以及`str1`和`str3`。由于`str1`和`str2`完全相同,`memcmp`返回`0`,表示它们相等。而`str1`和`str3`只有大小写不同,所以`memcmp`会返回第一个不同字节的偏移量,因此`str1`和`str3`不相等。也就是说,如果`s1`中的某个字节与`s2`中的对应字节不同,`memcmp`会返回该字节在`s1`中的偏移量(以字节为单位)。- 如果`n`为0,则返回`0`。(地址,地址,比较几个字节)原创 2024-03-19 03:30:00 · 1876 阅读 · 0 评论 -
C语言-memset(改变数值函数)
然而,在某些情况下,特别是涉及到多字节数据类型(如`char`、`short`、`int`等)时,可能需要结合其他函数如`memcpy`来确保数据的正确初始化。需要注意的是,`memset`是按字节操作的,所以当需要将数组的每个元素都设置为同一个值时,需要确保该值在一个字节中可以表示。在上面的例子中,我们定义了一个大小为10的整型数组`arr`,使用`memset`函数将数组的每个字节都设置为0。这里需要知道的是,这存储的时候是按照字节为单位进行存储的,所以这里的改变20个字节。从第三个字符开始进行改变。原创 2024-03-19 05:30:00 · 340 阅读 · 1 评论 -
C语言-memmove(重复地址拷贝模拟实现)(包含动图)
地址是从低地址到高地址也就是低----------------------------------------->高。原创 2024-03-18 06:45:00 · 944 阅读 · 0 评论