自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Stewie Lee的博客

分享学习过程中遇到的一些知识。

  • 博客(62)
  • 收藏
  • 关注

原创 BMP图片详解

我们可以直接使用Windows电脑自带的画图导出位图实例。可以看到这里是有BMP图片导出选项的。我们可以将图片的尺寸调小一些,以便我们分析:然后将图片放大些,以便我们作画:然后调整画笔粗细:然后我们可以调整颜色,这里可以直接调整RGB颜色:然后就可以在刚刚我们创建的画布上面作画了。

2024-05-22 16:05:57 420

原创 C语言——预处理指令

return 0;这里是可以编译通过的,运行结果也是对的:;;return 0;这里编译器会报错:这里是有语法错误的。在C语言中,#include是一个预处理指令,用于将一个源文件的内容插入到另一个源文件中。这通常用于包含标准库或自定义库的头文件,以便在程序中使用这些库中定义的函数、类型和宏。#include或:用于包含标准库头文件。查找策略是,编译器会在标准库头文件目录中查找这些文件。:用于包含用户自定义的头文件。

2024-05-22 16:05:46 637

原创 C语言——程序环境

对于前三个步骤,如果一个项目中有多个源文件,那每个源文件都会单独被编译器执行上面的三个步骤,然后产生三个对应的目标文件。然后第四步链接,则会将多个目标文件与链接库文件链接在一起。这里的链接库就是一些动态和静态库。在Visual Studio中,编译器是cl.exe,链接器是link.exe。对于前面的三个步骤,由于它们都是由编译器完成,所以可以合称为一个步骤,合称为编译,第四步由链接器完成,为单独一个步骤——链接。运行环境是程序实际执行的地方。程序必须被加载到内存中才能执行。

2024-05-17 11:27:07 846

原创 C语言——文件相关操作补充

对于fgetc,当返回值为EOF时,可能表示文件读取结束。对于fgets,当返回值为NULL时,可能表示文件读取结束。对于fscanf,当返回值为EOF时,可能表示文件读取结束。对于fread,当返回值小于请求的元素个数count时,可能表示文件读取结束。

2024-05-12 16:16:02 760

原创 C语言——文件缓冲区

用户缓冲区和系统缓冲区都是为了提高I/O操作的效率而设计的,但它们位于不同的内存空间,由不同的实体管理。用户缓冲区是用户程序的一部分,而系统缓冲区是操作系统内核的一部分。在实际的文件I/O操作中,这两种类型的缓冲区可能会同时存在,共同协作以优化性能。例如,用户程序可能首先将数据写入用户缓冲区,然后由C标准I/O库将数据从用户缓冲区转移到系统缓冲区(这里是通过调用系统接口),最终由操作系统内核将数据写入磁盘。缓冲文件系统(Buffered I/O)是标准C(ANSI C)中处理文件输入输出的一种机制。

2024-05-12 16:15:54 1188

原创 文本文件和二进制文件

数据在内存中以二进制的形式存储,如果不加转换的输出到外存(例如硬盘驱动器HDD、固态驱动器SSD),就是二进制文件。如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。以读文件为例, 两者的操作都是磁盘->文件缓冲区->应用程序内存空间磁盘到文件缓冲区:在这一阶段,数据以二进制形式从存储介质传输到文件缓冲区,这一过程对于文本文件和二进制文件是相同的。操作系统并不关心文件的具体内容是文本还是其他类型的数据。文件缓冲区到应用程序内存空间。

2024-05-09 17:22:03 706

原创 ANSI转义序列

SGR(Select Graphic Rendition)是一种ANSI 转义码序列,同样也是上面的CSI 序列的一种,就是上面CSI 序列表格中背景为蓝色的一行,用于在文本终端中设置文本属性,包括颜色、样式和其他外观效果。它允许开发者控制文本在终端上的呈现方式,从而创建出更丰富多彩的用户界面和输出效果。SGR 序列由 ESC(Escape)字符后跟着零个或多个以分号分隔的参数组成,然后以字母 "m" 结束。参数用于指定要应用的不同文本属性,例如颜色、粗体、斜体等。

2024-05-09 17:21:44 925

原创 C语言——rand函数

这是一个在 C 标准库<stdlib.h>中定义的函数,用于生成伪随机数,默认情况下,它生成从 0 到RAND_MAX的伪随机数,其中RAND_MAX是一个常数,通常是32767。返回产生的从 0 到RAND_MAX的伪随机数。在使用 rand 函数时要配合 srand 函数设置 rand 函数的随机种子。

2024-05-04 23:45:19 1081

原创 C语言——文件相关操作

文件用于永久存储数据。通过使用文件,我们可以在程序关闭后保存数据,以便将来可以重新访问和修改。文件是数据存储和交换的重要手段。它们用于日志记录,数据分析,保存用户配置,程序间的数据传输等。文件是存储在某种长期存储设备上的一系列数据的集合,如硬盘、SSD、光盘或USB驱动器。计算机中的文件可以包含文本、图像、音频、视频数据或任何其他形式的信息,并且通常通过文件系统来组织和访问。在程序设计方面,我们一般讨论两种文件:程序文件和数据文件(从文件功能角度分析)。功能函数名适用于字符输入函数fgetc。

2024-05-04 10:21:37 859

原创 C语言——柔性数组

在结构体内部,所有成员都有固定的偏移量。如果柔性数组不是最后一个成员,那么在它之后的任何成员的位置将无法确定,因为柔性数组的大小在编译时是未知的。放在最后确保所有其他成员都有固定的偏移。

2024-04-29 16:42:53 1307

原创 C语言——小知识和小细节17

这段代码实际上实现不了它所想要表达的功能,而且程序会崩溃。

2024-04-28 16:42:36 658 1

原创 Linux——终端

终端最初是指终端设备(Terminal),它是一种用户与计算机系统进行交互的硬件设备。在早期的计算机系统中,终端通常是一台带有键盘和显示器的电脑,用户通过它输入命令,计算机在执行命令后将结果显示在终端的屏幕上。随着技术发展,"终端"的概念也经历了一定的演变。现代操作系统中的"终端"一词通常指的是终端仿真器(Terminal Emulator),它是一种软件,模拟了传统硬件终端的功能,允许用户通过图形界面与系统的命令行接口进行交互。用户可以在终端仿真器中输入命令,由操作系统执行,并在同一界面中显示输出结果。

2024-04-27 22:09:58 910

原创 C语言——动态内存管理

静态分配的内存大小在编译时就固定了,不论是否使用都会占用这部分资源。动态内存管理可以根据实际需要来分配内存,这有助于避免浪费和更有效地利用有限的内存资源。许多复杂的数据结构,如树、图和各种链式结构,通常需要在运行时动态地创建和销毁节点,这也需要动态内存管理。

2024-04-26 19:44:04 893

原创 C语言——通讯录实现

本文只是对于结构体类型的练习。只是简单的静态通讯录实现,没有具体的UI界面,只有一些简单的功能,同时也比较粗糙,有很多地方没有经过足够的打磨。

2024-04-26 19:43:49 214

原创 C语言——自定义数据类型(结构体内存对齐)

使用struct...struct 结构体标签变量定义;变量定义;变量定义;...} 结构变量列表;tag是结构体标签。是标准的变量定义,比如 int i;或者 float f;,或者其他有效的变量定义。结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。在一般情况下,tag、member-list、variable-list 这 3 部分至少要出现 2 个结构体的自引用是一种在结构体定义中包含指向其自身类型的指针的技术。这在C语言中通常用来实现链表树和。

2024-04-25 09:59:27 964

原创 C语言——指针进阶

这里数组名表示首元素地址,是int*类型,将三个一维数组的首元素地址存到一个指针数组中,就可以模拟二维数组。函数指针的定义需要指定它将指向的函数的返回类型和参数类型。返回类型 (*指针变量名)(参数类型列表);实际上没有必要,只要将类型标出就行了。返回类型 (*数组名[])(参数类型列表);typedef 返回参数(*funcPtr)(参数列表);

2024-04-25 09:59:08 1400

原创 Linux——文件与目录

可以在终端中输入命令ls /列出 / 下面的子目录:对于不同的Linux发布版本,/ 下的子目录可能不同。

2024-04-24 09:00:34 572 1

原创 Linux——界面和用户

本篇文章所写的都是基于centos 7 64位(通过虚拟机运行)。

2024-04-24 09:00:13 1263

原创 C语言——小知识和小细节16

例如字符串 abcd ,左旋一个就是 bcda ,左旋两个就是 cdab。

2024-04-23 20:41:40 464 1

原创 C语言——字符串和字符串函数

实际上C语言中实际上是没有内置的字符串类型的,大部分字符串都是以字符型数组和常量字符串的形式存在的。在这个例子中,greeting是一个字符数组,自动计算所需的大小以容纳字符串及其结尾的空字符\0。这里,buffer是一个大小为50的字符数组,初始化时只有前5个字符被设置为"Hello",第6个字符为空字符\0,其余字符因不完全初始化而初始化为\0。是一个指向字符的指针,指向字符串字面量的首字符。注意,字符串字面量存储在程序的只读部分,因此通过指针修改字符串内容可能会导致未定义行为。

2024-04-23 20:40:34 1299

原创 C语言——小知识和小细节15

运行结果:所以具体的初始化情况:arr[0] 就代表二位数组第一个子数组的第一个元素的地址,所以 *p 就能访问到二位数组第一个子数组的第一个元素的地址,即为 arr[0][0] ,所以运行结果是2。

2024-04-22 21:58:58 690

原创 C语言——小知识和小细节14

运行结果:可以看到与数组相关的参数经过 sizeof 运算符后,得到的结果是不尽相同的。

2024-04-22 21:58:48 663

原创 C语言——小知识和小细节13

一个有若干奇数和若干偶数的数组,例如。

2024-03-07 13:06:25 181 2

原创 C语言——数据存储

整型数据是以二进制补码形式在内存中存储的。

2024-03-07 10:00:20 948

原创 C语言——小细节和小知识12

将句子中的单词位置倒置,标点不用倒置,例如i love you.倒置结果是:you. love i。采用两步翻转法来实现单词位置的倒置。首先,它整体翻转整个字符串,然后再逐个翻转每个单词内的字符。工作流程:函数定义:变量声明和初始化:第一个for循环:整体翻转字符串第二个for循环:翻转单词内的字符函数:运行结果:从字符串的最后读取字符串内容,用两个数组存储,将原数组从尾部读取到首部,把单词一个个填入新数组中。主要函数 进行详细分析:首先获取输入字符串 的长度,并将指针移动到字符串的末尾。

2024-01-17 20:12:50 1017

原创 C语言——小细节和小知识11

自幂数,也被称为阿姆斯特朗数,是一种特殊类型的数,在数学上具有一个有趣的性质:一个n位的正整数,其各个位上的数字的n次幂之和等于它本身。n: 首先,要确定一个数是几位数。例如,153是一个三位数,因此n = 3。n:接着,将该数的每个位上的数字取出来,分别计算其n次幂。对于153115125327:将上一步中得到的所有幂相加。对于153,其和是。:如果这个总和等于原来的数,则称该数为自幂数。所以,153是一个自幂数,因为。

2024-01-17 17:37:07 3412

原创 C语言——小细节和小知识10

在C语言中,当局部变量和全局变量的名字相同时,程序会优先使用局部变量,这是由语言的作用域规则决定的。作用域是指程序中可以访问变量的区域。局部变量局部变量是在函数或代码块内部定义的变量。它们只在定义它们的函数或代码块内部可见。当程序的执行离开该函数或代码块时,局部变量的生命周期结束,并且它们所占用的内存可能被释放或用于其他目的。全局变量全局变量是在所有函数和代码块之外定义的变量。它们在程序的整个运行期间都是可见的,并且它们的值在函数调用之间是持久的。

2024-01-16 16:08:35 961

原创 C语言——实用调试技巧

在C语言中,const关键字用于修饰变量,表示变量的值不应被改变。使用const类型安全: 当你将const用于函数参数时,如,这告诉编译器和阅读代码的人,这个参数指向的数据不应该被该函数修改。这提供了额外的类型安全,因为如果函数内部的代码尝试修改src指向的内容,编译器将报错。自文档化const关键字作为函数接口的一部分有助于自我文档化。人们立即可以看出src是不应该改变的,而dest因为没有const修饰,是可以被修改的。优化: 编译器可以利用const关键字进行优化。

2024-01-16 14:14:07 1348

原创 C语言——小细节和小知识9

如果整型数据是以小端字节序(Little-Endian)存储的,那么该数据的首地址会指向这个整型数据的最低有效字节。换句话说,整型数据的首个字节(存储在首地址处的字节)包含了这个数值的最低位部分。这意味着,如果我们有一个32位的整型数值0x123456780x0000 0x78 // 最低有效字节 (LSB)0x0003 0x12 // 最高有效字节 (MSB)在这种情况下,首地址0x0000指向的是值0x78,这是这个整型数值的最低有效字节。

2024-01-15 16:07:34 2549 1

原创 C语言——小细节和小知识8

我之前的文章《》中有详细讲解位操作符。

2024-01-07 10:44:23 1192 1

原创 C语言——结构体

int age;int height;为了声明一个匿名结构体的实例,需要先给结构体定义一个别名,或者直接在声明时提供一个变量名。如果想要声明一个匿名结构体并立即创建一个该类型的实例,可以用下列方法:struct {int age;int height;int age;int height;} Person;这是错误的。因为使用了typedef,所以在定义变量时应该直接使用别名Person,而不是。如果使用。

2024-01-06 10:58:20 1549

原创 C语言——指针

在C语言中,指针数组是一个数组,其每个元素都是一个指针。换句话说,指针数组是用来存储指针的数组。这种数据结构经常被用来存储字符串数组或者动态分配的结构体数组的指针。int a = 0;int b = 1;int c = 2;//指针数组存放指针。

2024-01-05 18:38:13 1579

原创 C语言——表达式的求值

隐式类型转换,也称作自动类型转换,是编程语言在表达式求值时自动进行的类型转换,目的是解决不同类型之间的操作。而这一过程是自动发生的,不需要程序员显式指定。编译器根据一定的规则自动进行类型的转换以适应操作的需要。算术运算中:当算术运算中的操作数类型不匹配时,例如一个int类型和一个float类型相加,较低精度的类型(这里是int)会自动转换为较高精度的类型(这里是float),以便进行计算。赋值操作中:当将一个表达式的值赋给一个不同类型的变量时,如将float类型赋给int类型的变量,会进行类型转换。

2024-01-03 15:12:10 1942

原创 C语言——操作符

用于将两个数相加,例:3 + 3结果为6。

2024-01-02 22:00:12 1354

原创 C语言——扫雷

扫雷是一款经典的小游戏,那如何使用C语言实现一个扫雷游戏呢?

2023-12-30 14:28:57 6345 4

原创 计算机基础1

网络带宽定义为在特定的时间内,从网络的一部分到另一部分最多可以传输的数据量。带宽通常以比特为单位进行度量,因为网络传输的基本单位是比特。常见的带宽度量单位包括比特每秒(bps)、千比特每秒(Kbps)、兆比特每秒(Mbps)、吉比特每秒(Gbps)、太比特每秒(Tbps)和拍比特每秒(Pbps)。

2023-12-29 10:03:50 1085

原创 C语言——小细节和小知识7

递进这时字符串长度为0,小于2。开始回归,回归过程是之前的临时变量从前往后依次放。最终,递归完成,字符串反转完成。递进时就完成了字符串交换。回归时函数就调用结束了,回归时没有实质的语句执行。这个与上面的递归2相似,都是对应的位置交换。

2023-12-28 10:55:38 722

原创 C语言——数据类型

用户可以使用typedef为一个已存在的数据类型定义一个新名字。

2023-12-27 09:40:28 1402

原创 C语言——枚举类型

1、先定义枚举类型,再定义枚举变量enum DAY2、定义枚举类型的同时定义枚举变量enum DAY} day;3、省略枚举名称,直接定义枚举变量enum} day;这三种定义方式都是正确的。注意元素之间是用逗号分隔的。

2023-12-26 21:17:29 555

原创 C语言——小细节和小知识6

反斜杠,转义字符中的转义序列符将?转义,防止他被识别成三字母词(很早的东西)中的问号。

2023-12-23 14:42:35 975

C语言+EasyX图形化界面扫雷

使用EasyX图形化库,基于C语言编写的带有可视图形界面的扫雷程序,压缩包中有源文件,rsc中是源文件图片之类的,还有源代码,以及debug和release版本的可执行程序。

2024-01-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除