C语言
文章平均质量分 95
分享个人学习笔记及心得;讲解你不知道的C语言
小米里的大麦
敲键织梦路漫漫,技成心坚步步攀。千锤百炼终有时,大厂门前待我还。
展开
-
【vs】实用调试技巧——学会写优秀的代码!
所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖,也就没有迹象了,如果问心有愧,就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。学会调试对于程序员来说至关重要,它不仅能够帮助程序员找出并修复程序中的错误,还能提升代码的质量和可维护性。初学者可能80%的时间在写代码,20%的时间在调试。运行时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运行时问题。逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。或者凭借经验就可以搞定。原创 2024-07-31 13:57:19 · 893 阅读 · 3 评论 -
【C/C++】程序的构建(编译)过程概述
每个语言和环境都有其特定的构建和执行流程,但大多数都会涉及某种形式的处理,将源代码转换成机器可以直接理解的形式。在编译和构建一个 C/C++ 程序的过程中,通常会经过预处理编译汇编和链接这四个阶段,这个过程被称为构建流程或者编译流程。每个阶段都负责将代码从一个形式转换为下一个形式,最终生成可执行文件。下面我会以一个简单的C/C++程序详细讲解每个阶段的具体过程。注意:编译器的工作其实非常复杂,远远不是博主我这轻描淡写的两句话就能描述清楚的!想要深入了解,还需不断钻研!!!原创 2024-09-17 12:29:18 · 1646 阅读 · 11 评论 -
【C语言】通讯录的实现(基本版和动态版)
对于我们要创建的通讯录管理系统来说,建立一个菜单无疑是非常简单明了的,可以让用户自行选择功能,这就好比在一个餐厅里,店员提供了一份菜单,顾客就可以根据自己的意愿进行点菜,同理,在操作界面显示一个完整的菜单,才能更好地管理通讯录系统,当然,尽管终端显示的菜单没那么美观,哈哈,要注重功能的实现!因为在创建了通讯录之后,里边所有信息的会以随机值的形式存在,通讯录的存储还没满,这样的话没存东西的地方就会打印出一些奇奇怪怪的东西,所以要进行初始化。能够看到:除了核心函数,还有五个排序所用函数比较的指针,这是什么呢?原创 2024-08-09 16:10:59 · 872 阅读 · 12 评论 -
【C语言】动态内存管理(malloc,free,calloc,realloc详解 )
🦄。原创 2024-08-09 16:09:48 · 1828 阅读 · 4 评论 -
【C语言】位段详解
例如,即使你的位段结构体只占用了8位(即1字节),由于内存对齐的要求,实际的结构体大小可能仍然是4字节。例如,如果一个位字段在32位边界结束,而下一个位字段需要从新的32位边界开始,则编译器可能会在它们之间插入未使用的位。当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。假设:位段分配的内存中的比特位是从右向左使用的,分配剩余的bit位不够使用时,浪费掉剩余内存。位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。原创 2024-08-09 16:09:09 · 1105 阅读 · 3 评论 -
【C语言】结构体内存布局解析——字节对齐
字节对齐是指数据在内存中的存储方式,以提高内存访问效率。大多数现代计算机系统在内存访问时,要求数据地址满足特定的对齐条件,否则可能会导致访问效率下降,甚至是硬件异常。具体来说,数据的对齐要求是由其数据类型决定的。例如,4字节的整型变量通常要求其地址是4的倍数。结构体中的每个成员也必须满足其对齐要求。对齐规则通常由编译器和处理器架构共同决定。原创 2024-08-03 22:26:35 · 1624 阅读 · 8 评论 -
【C语言】字符函数和字符串函数详解
strncpystrncatstrncmp。原创 2024-08-03 17:43:06 · 1583 阅读 · 11 评论 -
【C语言】处理文件错误:详解 fopen, strerror 和 perror
1. 函数原型。原创 2024-07-31 18:34:06 · 1015 阅读 · 2 评论 -
【C语言】qsort详解——能给万物排序的神奇函数
🦄🎏⚙️一、引言在C语言中,qsort本篇文章将详细介绍qsort函数的以及它来进行排序。二、qsort函数介绍qsort函数是C标准库中的一个通用排序函数,它的原型定义在stdlib.h头文件中。qsort函数之所以被称为“快速排序”函数,是因为它通常采用了一种高效的排序算法——快速排序算法来实现排序过程。来看看上的介绍:1.函数原型basenumsizecompar2.1比较函数比较函数compar接受两个void *类型的参数,并返回一个int类型的值。原创 2024-07-31 00:05:44 · 982 阅读 · 2 评论 -
【C语言】assert(断言)使用详解
在软件开发过程中,确保程序的正确性是非常重要的。为了帮助开发者在开发阶段尽早地发现潜在的问题,C语言提供了一个非常有用的工具——assert。本文将详细介绍assert的工作原理、使用方法以及一些最佳实践。assert是一个预处理器宏,通常被用来在开发和测试阶段检测程序中某些关键假设是否成立。当某个断言失败时,assert会终止程序,并输出一条错误信息,这有助于开发者快速定位问题所在。assert是一个非常有用且强大的工具,可以帮助开发者在开发过程中快速定位和修复错误。通过合理使用assert。原创 2024-07-29 23:37:39 · 1131 阅读 · 7 评论 -
【C语言】整数类型及其数值范围(截断+数据)
大家好!今天我想跟大家分享一些关于 C 语言整数类型及其数据范围的相关知识,特别是它们的位数和数值范围。这是编程中非常基础但又容易被忽视的部分,了解这些可以帮助我们更好地编写高效和可靠的代码。在 C 语言中,截断是指当一个较大的数值被赋给一个较小的数据类型时,超出该类型表示范围的部分被丢弃的过程。例如,如果我们试图将一个大于 255 的数值赋给一个类型的变量,那么超出 8 位的部分将被截掉。原创 2024-07-29 22:37:47 · 1214 阅读 · 2 评论 -
【C语言】深入探讨数组传参
在C语言中,数组传参是一个常见的操作,尤其是在处理大量数据或需要多次访问相同数据集时。理解如何传递数组以及这些方法之间的差异是编写高效和安全代码的关键。在这篇博客中,我们将详细讨论C语言中数组传参的几种常见方法,并探讨它们的优缺点。原创 2024-07-24 20:59:19 · 1313 阅读 · 2 评论 -
【C语言】数组名的不同情况
在C语言中,数组名在绝大多数情况下表现为指向数组第一个元素的指针。具体而言,当数组名出现在表达式中(除了作为函数参数时的特殊情况),它会被视为指向数组首元素的常量指针。这意味着你可以使用下标运算符来访问数组中的元素,也可以进行指针算术来遍历数组。然而,当数组名作为函数参数被传递时,它会退化为一个普通指针,失去了与原始数组大小和边界的相关信息。在函数内部,这个指针仅仅指向了传入数组的第一个元素,而不携带任何有关整个数组的信息,除非另外传递数组的大小。原创 2024-07-24 20:31:12 · 926 阅读 · 2 评论 -
位操作符(速成)
位操作符允许你在整数的二进制表示上进行直接操作,这对于优化性能和节省内存空间特别有用,尤其是在底层编程中。按位与(对于两个数的每一位,如果两位都是1,则结果的对应位为1;否则为0。(即6 & 5 = 4)按位或(对于两个数的每一位,如果两位中至少有一个是1,则结果的对应位为1;否则为0。(即6 | 5 = 7)按位异或(对于两个数的每一位,如果两位不同则结果的对应位为1;如果相同则为0。(即6 ^ 5 = 3)这些操作符通常用于处理二进制模式,比如在图形学中设置颜色掩码,或者在数据结构中管理位标志。原创 2024-07-14 21:37:08 · 958 阅读 · 0 评论 -
详解异或操作符 ^
异或的规则是如果两个比特相同则结果为0,不同则结果为1。异或操作符是一种非常实用且强大的工具,在计算机科学和数字电路设计中有广泛应用。其基本原理是针对两个值的对应位进行比较,如果相应位相同则结果为0,不同则结果为1,并且具有自反性、交换律和结合律等性质。原创 2024-07-14 19:01:07 · 914 阅读 · 2 评论 -
C语言中的移位操作符与原码、补码、反码
任意一种记法均可。原创 2024-07-12 18:16:54 · 1502 阅读 · 2 评论 -
学C必做项目——扫雷游戏
扫雷游戏的目标是在不触发任何地雷的情况下,找出并标记所有隐藏的地雷。游戏界面由一个方格组成,每个方格要么是空的,要么包含一个数字,该数字表示周围8个格子中有多少个地雷。如果点击一个地雷,则游戏失败;如果成功揭示所有非雷格子,则游戏胜利。原创 2024-07-10 21:00:02 · 1355 阅读 · 3 评论 -
检验C语言基础——井字棋
最重要。原创 2024-07-05 21:44:58 · 480 阅读 · 1 评论 -
C语言基础(初识)
0基础学C语言,基本了解C语言的基础知识,对C语言有一个大概的认识。本章重点:什么是C语言第一个C语言程序数据类型变量、常量字符串转义字符注释选择语句循环语句函数数组操作符常见关键字define定义常量和宏指针结构体。原创 2024-07-03 21:27:54 · 746 阅读 · 0 评论