- 博客(37)
- 收藏
- 关注
原创 个人博客声明
这里,是我学习的痕迹,也是我们共同成长的空间,希望通过这个博客与更多志同道合的朋友们一起学习和进步。知识的分享应当建立在尊重与理解之上,如果我的博客中无意间使用了你的原创内容或者您发现博客中有任何内容侵犯了您的权益,我重视知识产权和版权保护问题,收到通知后我会在第一时间进行删除或修正。在这个博客里,我将不定期分享我在学习过程中遇到的各种有趣的技术点、代码片段、图片资料以及有价值的文档。
2024-07-03 19:45:38 491 19
原创 【C++】类与对象(上篇)
类的定义class是定义类的关键字。类是对象的蓝图,包含成员变量(属性)和成员函数(方法)。类定义语法// 成员变量// 成员函数class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。两种定义方式在类体中定义成员函数:这样的函数可能被编译器视为inline内联函数。类声明与定义分离:通常将类的声明放在.h文件中,成员函数的定义放在.cpp文件中。
2024-09-23 10:01:00 1189 50
原创 【C++】class详解(与struct对比讲解)
在C++中,class都struct可以用于定义自定义的数据类型,并且它们在很多方面都是相似的。然而,它们之间的主要区别体现在默认的访问权限以及编程习惯上。接下来我将详细讲解这两者的区别、实现以及常见的易错点,辅以多个代码示例。// struct 示例int a;// 默认 publicvoid show() { // 默认 public// class 示例int a;// 默认 privatepublic:void setA(int val) { // public 明确指定。
2024-09-23 09:57:31 1029 10
原创 【C++】内联函数(inline function)详解
内联函数是一种建议编译器在调用函数时,不使用普通的函数调用机制(如压栈、跳转等),而是将函数体直接嵌入到调用点。它的优点是可以减少函数调用的开销,特别是对于频繁调用的小函数。以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,以提升程序运行的效率。语法inline内联函数适合短小且频繁调用的函数,避免了宏定义的副作用,具有类型检查和调试功能。编译器有最终决策权,不一定会根据inline关键字做内联优化,特别是在函数较大或较复杂时。
2024-09-21 17:08:26 761 9
原创 【C++】关键字auto详解
C++中的auto关键字用于自动推导变量的类型,它大大简化了代码书写,尤其是在变量类型复杂或冗长时。以下是关于auto关键字的详细讲解,包括其使用细则、不能推导的场景、以及基于循环中的应用范围。在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,可以思考下为什么?C++11中,标准委员会赋予了autoauto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
2024-09-21 17:07:52 3182 3
原创 【C++】深入理解引用:从基础到进阶详解
C++中的引用(reference)是一个非常重要的概念,它可以让你创建一个变量的别名,直接操作原始变量而不需要复制。引用在函数参数传递、返回值和效率优化等方面有广泛的应用。下面我们会一步步讲解引用的各个知识点,并搭配上由易到难的代码示例来帮助深入理解。引用的主要作用是在函数传参和返回值中减少不必要的复制操作,提高程序的运行效率。const引用是非常灵活和常用的,能够接收多种类型的对象,包括字面量和临时对象,广泛用于保证数据不被修改。注意生命周期和局部变量引用问题,避免程序指向无效内存。权限控制。
2024-09-17 16:12:34 1320 27
原创 【C/C++】程序的构建(编译)过程概述
每个语言和环境都有其特定的构建和执行流程,但大多数都会涉及某种形式的处理,将源代码转换成机器可以直接理解的形式。在编译和构建一个 C/C++ 程序的过程中,通常会经过预处理编译汇编和链接这四个阶段,这个过程被称为构建流程或者编译流程。每个阶段都负责将代码从一个形式转换为下一个形式,最终生成可执行文件。下面我会以一个简单的C/C++程序详细讲解每个阶段的具体过程。注意:编译器的工作其实非常复杂,远远不是博主我这轻描淡写的两句话就能描述清楚的!想要深入了解,还需不断钻研!!!
2024-09-17 12:29:18 1756 12
原创 【C++】函数重载
自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是谁也赢不了!,后者是谁也赢不了!在C++中,允许在同一作用域中声明几个功能类似的同名函数函数重载(Function Overloading)是指在同一个域中,可以定义多个函数名相同但参数列表不同的函数。是函数的一种特殊情况,编译器通过参数的类型、顺序和数量来区分不同的重载函数,而不仅仅是通过函数名。
2024-09-17 12:28:08 732 2
原创 【C++】缺省(默认)参数
参数参数(默认参数)是C++中的一个强大功能,允许简化我们的函数调用,减少重复代码。当参数的默认值满足大多数情况下的需求时,它可以大幅提升代码的吸引力,全缺省和半缺省的区别在于函数调用的灵活性与复杂性,全缺省更为简单,而半缺省提供了更多的可控性。与typedef比较中,参数注重于函数接口的设计,而typedef着眼于简化类型声明。两者都有适用的场景,但都致力于提升代码的简洁性和可维护性。合理地运用这两者,可以帮助开发者编写更高效且简洁的代码。
2024-09-16 12:03:03 939 14
原创 【C++】深入理解作用域和命名空间:从基础到进阶详解
从C语言到现在的C++非常不容易,但是C++这块硬骨头还是要啃呐,C++也算是一门新语言,不过是和C语言有着一些渊源罢了,同样的,学习一门语言还是从最基础的开始,本文我们将详细介绍域(作用域)和命名空间的知识,接下来,车速太快,不要掉队哦!类域:类中的成员变量和函数作用范围。命名空间域:命名空间中的变量和函数作用范围。局部域:函数或代码块内部变量的作用范围。全局域:全局变量的作用范围,整个程序中有效。::域作用限定符:用于区分全局域和局部域中的同名变量。定义命名空间,需要使用到。
2024-09-16 12:01:58 1515 9
原创 【C++】认识C++(前言)
什么是C++C++发展史C++的重要性如何学习C++本贾尼C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代, 计算机界提出了OOP(object:面向对象思想,支持面向对象的程序设计语言应运而生。1982年,博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++
2024-09-13 19:39:20 2076 25
原创 我的创作纪念日——128天
大学生活忙碌的学习之余,我总是抽出时间来更新我的CSDN博客,我发现,通过写作,不仅可以加深对知识的理解,还能提高自己的思维逻辑能力。从最初的一篇篇简短笔记到逐渐形成系统的知识体系,我在CSDN上的每一次分享也都如完善自我编码,吸引了一群志同道合的朋友,这些都是对我努力的认可和支持。最让我最开心的是,能够通过我的文章与读者交流,了解到自己的内容对他人有所帮助,这种成就感难以言表。不仅是知识的积累,还有思维的深化。未来的道路还很长,我将继续努力,不断探索新的技术领域,争取在编程的世界里留下更加深刻的足迹。
2024-08-24 15:10:59 808 16
原创 【C语言】双链表
在数据结构中,链表是一种线性数据结构,其中元素不是在内存中连续存储的,而是通过指针链接在一起。,如果对上述有注释的代码还存在疑惑,不妨画一画图,会极大方便我们进行理解!然而,这种额外的功能也带来了更高的存储开销,因为每个节点都需要额外的指针来保存前驱节点的信息。在这篇文章中,我们介绍了双链表的基本概念,并展示了如何使用C语言来创建和操作双链表。虽然双链表的结构相比单链表更复杂了,但正是由于双链表很“对称”,有规律,所以实现起来更方便了。当你看到这里的时候就会发现:双链表代码比单链表的代码会短很多,而且。
2024-08-19 15:09:05 1280 25
原创 【C语言】最详细的单链表(两遍包会!)
链表的第一个节点通常被称为“头节点”或“首节点”,而最后一个节点的指针域通常为空(NULL),表明链表的结束。这里本身的查找函数,人是不好观察的,所以又提供了注释部分的查找打印函数,这里需要理解的是更新/迭代的逻辑!,也就是说,除了可能存在的头节点外,链表中没有任何数据节点。),这个节点不包含任何数据,它的作用主要是方便对链表进行操作,例如插入和删除等。注意销毁的顺序迭代问题,这里要着重注意,稍有疏忽,很容易造成内存泄漏!要实现单链表,首先就要有节点,我们先创建节点,构建我们的。,一般不会单独用来存数据。
2024-08-19 14:58:39 1292 14
原创 深入理解C语言算法的时间复杂度和空间复杂度
通过使用大O渐进表示法,我们可以清晰地描述算法的性能,并在不同算法之间进行比较。无论是在时间还是空间的效率上,选择一个合适的算法往往是编程中的一个重要步骤。尽管在小规模输入时,两者的执行时间可能差别不大,但大O表示法揭示了随着输入规模增大,性能差距将如何扩大。是一种用于描述算法复杂度的数学符号,它关注的是算法执行时间或所需空间随输入规模变化的增长趋势。个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知。,即当输入规模趋向无穷大时,算法的执行时间或空间需求的上界。
2024-08-10 14:29:43 908 15
原创 【C语言】通讯录的实现(基本版和动态版)
对于我们要创建的通讯录管理系统来说,建立一个菜单无疑是非常简单明了的,可以让用户自行选择功能,这就好比在一个餐厅里,店员提供了一份菜单,顾客就可以根据自己的意愿进行点菜,同理,在操作界面显示一个完整的菜单,才能更好地管理通讯录系统,当然,尽管终端显示的菜单没那么美观,哈哈,要注重功能的实现!因为在创建了通讯录之后,里边所有信息的会以随机值的形式存在,通讯录的存储还没满,这样的话没存东西的地方就会打印出一些奇奇怪怪的东西,所以要进行初始化。能够看到:除了核心函数,还有五个排序所用函数比较的指针,这是什么呢?
2024-08-09 16:10:59 919 12
原创 【C语言】位段详解
例如,即使你的位段结构体只占用了8位(即1字节),由于内存对齐的要求,实际的结构体大小可能仍然是4字节。例如,如果一个位字段在32位边界结束,而下一个位字段需要从新的32位边界开始,则编译器可能会在它们之间插入未使用的位。当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。假设:位段分配的内存中的比特位是从右向左使用的,分配剩余的bit位不够使用时,浪费掉剩余内存。位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。
2024-08-09 16:09:09 1303 3
原创 【C语言】数据结构前言
数据结构不仅影响数据的存储,还影响算法的效率。每种数据结构都有其独特的优缺点和适用场景,因此选择合适的数据结构对于解决问题至关重要。数据结构和算法是计算机科学中的两大核心概念,它们在编程、系统设计和解决复杂问题中起着至关重要的作用。(Introduction to Algorithms)——Cormen、Leiserson、Rivest、Stein:一本经典的算法书籍,涵盖了几乎所有的重要算法。通过系统的学习和不断的实践,相信你一定能够掌握数据结构和算法,为未来的编程道路打下坚实的基础。
2024-08-09 16:08:06 736 6
原创 【C语言】结构体内存布局解析——字节对齐
字节对齐是指数据在内存中的存储方式,以提高内存访问效率。大多数现代计算机系统在内存访问时,要求数据地址满足特定的对齐条件,否则可能会导致访问效率下降,甚至是硬件异常。具体来说,数据的对齐要求是由其数据类型决定的。例如,4字节的整型变量通常要求其地址是4的倍数。结构体中的每个成员也必须满足其对齐要求。对齐规则通常由编译器和处理器架构共同决定。
2024-08-03 22:26:35 1865 8
原创 【vs】实用调试技巧——学会写优秀的代码!
所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖,也就没有迹象了,如果问心有愧,就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。学会调试对于程序员来说至关重要,它不仅能够帮助程序员找出并修复程序中的错误,还能提升代码的质量和可维护性。初学者可能80%的时间在写代码,20%的时间在调试。运行时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运行时问题。逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。或者凭借经验就可以搞定。
2024-07-31 13:57:19 958 3
原创 【C语言】qsort详解——能给万物排序的神奇函数
🦄🎏⚙️一、引言在C语言中,qsort本篇文章将详细介绍qsort函数的以及它来进行排序。二、qsort函数介绍qsort函数是C标准库中的一个通用排序函数,它的原型定义在stdlib.h头文件中。qsort函数之所以被称为“快速排序”函数,是因为它通常采用了一种高效的排序算法——快速排序算法来实现排序过程。来看看上的介绍:1.函数原型basenumsizecompar2.1比较函数比较函数compar接受两个void *类型的参数,并返回一个int类型的值。
2024-07-31 00:05:44 1322 2
原创 【C语言】assert(断言)使用详解
在软件开发过程中,确保程序的正确性是非常重要的。为了帮助开发者在开发阶段尽早地发现潜在的问题,C语言提供了一个非常有用的工具——assert。本文将详细介绍assert的工作原理、使用方法以及一些最佳实践。assert是一个预处理器宏,通常被用来在开发和测试阶段检测程序中某些关键假设是否成立。当某个断言失败时,assert会终止程序,并输出一条错误信息,这有助于开发者快速定位问题所在。assert是一个非常有用且强大的工具,可以帮助开发者在开发过程中快速定位和修复错误。通过合理使用assert。
2024-07-29 23:37:39 1596 7
原创 【C语言】整数类型及其数值范围(截断+数据)
大家好!今天我想跟大家分享一些关于 C 语言整数类型及其数据范围的相关知识,特别是它们的位数和数值范围。这是编程中非常基础但又容易被忽视的部分,了解这些可以帮助我们更好地编写高效和可靠的代码。在 C 语言中,截断是指当一个较大的数值被赋给一个较小的数据类型时,超出该类型表示范围的部分被丢弃的过程。例如,如果我们试图将一个大于 255 的数值赋给一个类型的变量,那么超出 8 位的部分将被截掉。
2024-07-29 22:37:47 1399 2
原创 【C语言】深入探讨数组传参
在C语言中,数组传参是一个常见的操作,尤其是在处理大量数据或需要多次访问相同数据集时。理解如何传递数组以及这些方法之间的差异是编写高效和安全代码的关键。在这篇博客中,我们将详细讨论C语言中数组传参的几种常见方法,并探讨它们的优缺点。
2024-07-24 20:59:19 2089 2
原创 【C语言】数组名的不同情况
在C语言中,数组名在绝大多数情况下表现为指向数组第一个元素的指针。具体而言,当数组名出现在表达式中(除了作为函数参数时的特殊情况),它会被视为指向数组首元素的常量指针。这意味着你可以使用下标运算符来访问数组中的元素,也可以进行指针算术来遍历数组。然而,当数组名作为函数参数被传递时,它会退化为一个普通指针,失去了与原始数组大小和边界的相关信息。在函数内部,这个指针仅仅指向了传入数组的第一个元素,而不携带任何有关整个数组的信息,除非另外传递数组的大小。
2024-07-24 20:31:12 960 2
原创 深度剖析数据在内存中的存储
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
2024-07-22 22:02:54 724
原创 位操作符实战!
二进制中1的个数_牛客题霸_牛客网 (nowcoder.com)怎么样?初看,是否一头雾水?哈哈,没事,俺也一样😓😓😓,不过,当你看过我的解答定会明朗!
2024-07-15 13:25:17 1231 2
原创 位操作符(速成)
位操作符允许你在整数的二进制表示上进行直接操作,这对于优化性能和节省内存空间特别有用,尤其是在底层编程中。按位与(对于两个数的每一位,如果两位都是1,则结果的对应位为1;否则为0。(即6 & 5 = 4)按位或(对于两个数的每一位,如果两位中至少有一个是1,则结果的对应位为1;否则为0。(即6 | 5 = 7)按位异或(对于两个数的每一位,如果两位不同则结果的对应位为1;如果相同则为0。(即6 ^ 5 = 3)这些操作符通常用于处理二进制模式,比如在图形学中设置颜色掩码,或者在数据结构中管理位标志。
2024-07-14 21:37:08 979
原创 详解异或操作符 ^
异或的规则是如果两个比特相同则结果为0,不同则结果为1。异或操作符是一种非常实用且强大的工具,在计算机科学和数字电路设计中有广泛应用。其基本原理是针对两个值的对应位进行比较,如果相应位相同则结果为0,不同则结果为1,并且具有自反性、交换律和结合律等性质。
2024-07-14 19:01:07 1008 2
原创 学C必做项目——扫雷游戏
扫雷游戏的目标是在不触发任何地雷的情况下,找出并标记所有隐藏的地雷。游戏界面由一个方格组成,每个方格要么是空的,要么包含一个数字,该数字表示周围8个格子中有多少个地雷。如果点击一个地雷,则游戏失败;如果成功揭示所有非雷格子,则游戏胜利。
2024-07-10 21:00:02 1384 3
原创 C语言基础(初识)
0基础学C语言,基本了解C语言的基础知识,对C语言有一个大概的认识。本章重点:什么是C语言第一个C语言程序数据类型变量、常量字符串转义字符注释选择语句循环语句函数数组操作符常见关键字define定义常量和宏指针结构体。
2024-07-03 21:27:54 786 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人