自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 C++入门基础

C++命名空间以及一些基本操作了解

2024-09-28 20:28:39 1706

原创 数据结构:链表算法题

链表删除元素、反转,找链表中间节点

2024-09-27 18:30:33 1196

原创 数据结构算法题

数组轮转、删除数组的某个元素,数组元素唯一,合并有序数组

2024-09-24 12:26:27 1235

原创 数据结构:单链表

链表的基本结构与性质,带你深入了解单链表

2024-09-22 15:44:35 1671

原创 数据结构:顺序表

顺序表的基本功能

2024-09-19 12:14:52 1305

原创 数据结构:时间复杂度与空间复杂度

时间复杂度与空间复杂度详解

2024-09-16 14:17:09 1490

原创 预处理详解(二)

这是我们包含自己创建的头文件的方式,当我们使用这种方式包含头文件,编译器会在我们创建工程的地方寻找这个头文件,当工程文件找不到,才会去标准库函数的文件里面去找。在我们写程序时可能一个头文件要在多个.c文件里面包含,预编译时会将头文件替换成它的函数内容,这样在编译时就会出现重复编译,使得代码很繁琐。”,没有就编译一次,当第二次时,因为前面已经定义过了,所以就不会进行二次编译,这样就避免了重复编译的可能。答案是肯定的,可以,但是这样做查找的效率就低些,当然这样也不容易区分是库文件还是本地文件了。

2024-09-15 11:57:35 691

原创 预处理详解(一)

C语⾔设置了⼀些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。__FILE__ //进⾏编译的源⽂件__LINE__ //⽂件当前的⾏号__DATE__ //⽂件被编译的⽇期__TIME__ //⽂件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义1000register//为 register这个关键字,创建⼀个简短的名字#define do_forever for(;;) //⽤更形象的符号来替换⼀种实现break;case。

2024-09-14 10:36:54 1120

原创 C语言初识编译和链接

我们在 test.c 文件中每⼀次使用 Add 函数和 g_val 的时候必须确切的知道 Add 和 g_val 的地址,但是由于每个⽂件是单独编译的,在编译器编译 test.c 的时候并不知道 Add 函数和 g_val变量的地址,所以暂时把调⽤ Add 的指令的⽬标地址和 g_val 的地址搁置。就是根据汇编指令和机器指令的对照表⼀⼀的进⾏翻译,也不做指令优化。将源代码程序被输⼊扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字面量、特殊字符等)。

2024-09-12 21:09:09 918

原创 C语言文件操作详解

如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们只能使用文件。我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念。⽂件的内容不⼀定是程序,而是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。“r+”:以读写的形式打开文本文件(读时,从头开始;

2024-09-10 21:52:43 1038

原创 全球99%的人不知道的柔性数组

可能很多人从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。C99中,结构体中的最后⼀个元素允许是未知⼤⼩的数组,这就叫做『柔性数组』成员。

2024-09-09 11:05:29 562

原创 动态内存经典笔试题分析

如图:有两个警告,要是不顾及这些警告强制运行,就会使系统崩溃。我画了个图简单分析一下原因:(这里假设起始地址是0x11223344)这段代码由main函数调用Test函数。方法2:用二级指针存放str的地址,利用str的地址来改变str的值。

2024-09-07 15:46:04 611

原创 深入理解动态内存(一):动态内存使用常见问题

忘记释放不再使⽤的动态开辟的空间会造成内存泄漏。切记:动态开辟的空间⼀定要释放,并且正确释放。----------------------------------------------分隔符。

2024-09-07 10:59:04 1329

原创 动态内存管理

假如realloc没有成功创建空间,那根之前的malloc和calloc一样会返回我们空指针,如果直接将空指针传给ptr,那我们原有的空间和数据就会丢失,这样我们既丢失了原有数据还没有开辟新的空间,甚至我们想用free释放原有空间都找不到,相当于赔了夫人又折兵。事实是不行的,如果我们的空间剩余足够,让我们可以开辟出来我们需要的空间,那直接赋值给指针ptr就没什么问题,但是我们并不知道realloc函数是否真的为我们开辟了我们所需的空间。我们的内存是有限的,若是每次创建都不回收,那我们的内存就一定够用吗?

2024-09-06 12:10:55 1315

原创 自定义类型:枚举和联合

但是我们计算大小还有第二条,就是当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。如果不改变他们的常量,那么RED就代表数0,GREEN代表1,BLUE是2,现在对他们做了修改,RED变成了1,GREEN代表3,BLUE是4。联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)。• 当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。{}里面的是对应的枚举可能的取值,也叫枚举常量。

2024-09-05 10:42:08 948

原创 深入理解结构体(二)

下图是⽹络协议中,IP数据报的格式,我们可以看到其中很多的属性只需要⼏个bit位就能描述(如果不用位段,那么最少都是一个字节,会浪费大量空间),这⾥使⽤位段,能够实现想要的效果,也节省了空间,这样⽹络传输的数据报⼤⼩也会较⼩⼀些,对⽹络的畅通是有帮助的。位段的⼏个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位置处是没有地址的。所以不能对位段的成员使⽤&操作符,这样就不能使⽤scanf直接给位段的成员输⼊值,只能是先输⼊放在⼀个变量中,然后赋值给位段的成员。

2024-09-04 10:58:26 727

原创 深入理解结构体(一)

上一篇文章简单介绍了一下结构体的基础知识,现在深入了解一下结构体的大小,同时也是结构体的热门考点。在介绍结算结构体大小之前,先了解一下结构体的内存对齐规则。

2024-09-03 11:13:31 1606

原创 结构体的声明和定义

编译器会把上⾯的两个声明当成完全不同的两个类型(即便两个结构体的成员时一模一样的),所以是⾮法的。匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀次。------------------------------------------------------------------分隔符。其他情况使用匿名的结构体时有时也会出现报错,比如结构体还可以用做链表的结点。有兴趣的话可以去试试,编译时出现报错。那么看一下下列这行代码合法吗?所以建议尽量不用匿名结构体。

2024-09-02 22:04:55 545

原创 指针(三):函数指针

我们用&符号对函数取地址并以地址的形式打印,结果如图,很显然函数的确拥有自己的地址,并且函数名就是函数的地址。函数指针数组就是将函数的地址放在一个数组里面,通过访问数组的元素来访问函数,达到简洁代码的效果。函数指针,也就是存放函数地址的变量,有人会问,函数也会有地址吗?可以看出来很简单的一个功能我们写了很长一段代码,接下来试着用函数指针数组的形式来优化。-------------------------分隔符。为了方便观看,就不用多文件来封装代码了。

2024-08-27 22:48:09 437

原创 指针(二):数组指针

原因就是最后一组取出来的是整个数组的地址,让地址加1就是加整个数组的大小的地址,这段代码中arr的大小是40个字节,所以让整个数组的地址加1也就是加40个字节,但是取数组地址并用printf打印也是打印数组首元素的地址。第一行代码我们取出数组第一个元素的地址放在p1里面,第二行将数组名直接赋值给p,如图,以地址的形式打印出来的地址一模一样,说明数组名本质上就是数组首元素的地址。sizeof(数组名):sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,单位是字节。

2024-08-26 20:38:21 1181

原创 指针以及指针变量(一)(整形、字符)

今天简单介绍一些关于指针的知识,达到对指针的初步了解。因为数组跟函数的指针稍微有些杂乱,今天写介绍关于整形与字符的。函数与数组的会在整理好后一一价绍。

2024-08-23 14:45:29 715

原创 字符串函数:求字符串长度strlen;复制字符串strcpy以及字符串比较strcmp

strlen函数,strcpy函数以及strcmp函数详细讲解

2024-08-13 12:45:45 669

原创 自定义函数的定义与调用(二):单文件与多文件情况下的调用使用,static和extern的作用

在上一篇了解了函数的传参和一些基本用法,今天介绍一下函数怎么在编译器里用单文件或者多文件来定义和调用。

2024-08-07 17:16:52 986

原创 自定义函数的定义与调用(一):变量和数组作为的函数的参数调用

ret_type fun_name(形式参数)ret_type:函数的返回类型;fun_name:函数名称;()里面放的是自定义函数的建立形参;{}函数代码段(主体);注:函数的形参只是实参的一份临时拷贝,对形参的值进行更改不会影响到实参。

2024-08-03 18:11:24 1004

原创 扫雷游戏(入门篇)

昨天小编回顾童年,玩起了扫雷游戏,因为游戏都是一条条代码编出来的,小编心血来潮也去试了试,经过几个小时的琢磨也是编出来个入版,今天用这篇文章给大家分享一下。在编码时我将棋盘的规模大小与放置雷的数量在一个头文件内进行了定义//原始棋盘大小99//加上扩展期盼后的大小22//游戏模式10//简单模式:10个雷30。

2024-07-26 16:32:59 954

原创 分支与循环结构(下):while语句、for语句、do...while语句

本篇主要介绍C语言里的循环语句:while语句;for语句;do…while语句。

2024-07-18 16:21:06 697

原创 分支与循环结构(上):if语句、switch语句

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤ if 、 switch 实现分⽀结构。使⽤ for 、 while 、 do while 实现循环结构。

2024-07-18 12:30:03 622

原创 C4996 :‘scanf‘: This function or variable may be unsafe.关于VS编译器里的scanf使用相关问题问题

学习过程中遇到的问题,在使用VS编译器时编写scanf输入函数时出现的警告C4996: ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use_CRT_SECURE_NO_WARNINGS. See online help for details.

2024-07-15 15:42:15 383

空空如也

空空如也

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

TA关注的人

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