自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言作用域笔记(变量在哪能见光)

全局变量的麻烦:如果多个源文件里定义了同名的全局变量,会链接冲突(除非加 static 或 extern,下面说)。如果一个全局变量在 file1.c 里定义,想在 file2.c 里用,就要用 extern 声明。块作用域:在 if、for、while 里面的 {} 里定义的变量,也只在那对大括号里有效。只能在定义它的 那个块 里用(块就是一对 {} 括起来的区域)。任何函数都能改它,容易出现“谁偷偷改了”的 bug,尽量少用。在所有函数 外面 定义的变量,整个文件的所有函数都能访问。

2026-07-09 17:22:48 199

原创 C语言递归函数笔记(函数自己调自己)

多写几个递归函数,比如求最大公约数(辗转相除法)、数的二进制表示、判断回文字符串,练多了就自然了。定义:fib(0)=0, fib(1)=1, fib(n)=fib(n-1)+fib(n-2)阶乘通常写法不是尾递归,因为要 n * factorial(n-1),乘号在递归返回之后才做。所以递归太深会 栈溢出(Stack Overflow),就是栈帧太多把栈空间占满了。分治算法:快速排序、归并排序(虽然递归也有限制,但深度logN,安全)。尾递归的好处是:某些编译器可以优化成循环(不再新建栈帧),省内存。

2026-07-09 17:22:32 181

原创 C语言参数传递与栈的笔记(从底层理解传参)

摘要: C语言参数传递本质是值传递,通过栈实现。函数调用时,参数值会被压入栈中形成副本,因此修改形参不影响实参。若要修改外部变量,需传递指针(地址值)。数组传参会退化为指针,避免整体拷贝。栈帧存储参数、局部变量和返回地址,函数结束即释放。结构体建议传指针以提高效率。关键点包括:值传递特性、指针的作用、栈的运作机制及参数压栈顺序(通常从右向左)。理解栈机制有助于掌握递归、指针等概念,避免返回局部变量地址等常见错误。

2026-06-27 18:47:06 275

原创 C语言函数基础笔记(把代码拆开写)

C语言函数基础摘要:函数是可重复使用的代码块,通过参数输入并返回结果。其优势包括代码复用、逻辑清晰和便于协作。函数三要素为定义(实现功能)、声明(告知编译器)和调用(使用函数)。C语言采用值传递参数,内部修改不影响外部变量。函数可返回一个值(void无返回值),需注意作用域(局部变量函数内有效,全局变量文件内有效)。递归需设置终止条件,避免栈溢出。常见错误包括返回局部变量地址、遗漏返回值等。建议通过编写小型函数(如判断闰年)来巩固概念,为后续学习指针传参打下基础。

2026-06-27 18:46:16 200

原创 C语言循环控制笔记(break、continue、goto 那些事)

break 用在 while、for、do-while、switch 里,作用就是 终止所在的最内层循环或 switch。多写几个循环嵌套的练习,把 break 和 continue 用熟,基本就不怕了。因为当 i=2 时,continue 跳过后面的 i++,所以 i 永远不变,一直卡在 2。在 switch 里用 continue(不允许,continue 只在循环里)想要退出 while,要么用 return,要么设标志位,要么 goto。这次循环不满足条件,跳过后面的去下一次(continue)

2026-06-14 23:36:07 177

原创 C语言分支与循环笔记(if、while、for完整版)

if if (条件) {…while while (条件) {…} while (条件);常见错误:if (a = 5) 是赋值,不是判断,括号里结果是5(真),除非你故意这么写。小技巧:else if 不是独立语法,就是 else 后面跟了个 if。多个表达式用逗号:for (i=0,j=10;if (a > b);for (i=0, i<10, i++) 编译错误,用分号分隔。

2026-06-14 23:35:41 198

原创 C语言关系运算与逻辑运算笔记(条件判断必用)

本文总结了C语言中关系运算符和逻辑运算符的使用要点:1)关系运算符(如==、>)比较大小,注意避免混淆赋值=与相等判断==;2)逻辑运算符(&&、||、!)组合条件表达式,需理解短路求值特性;3)常见陷阱包括浮点数精度比较、区间判断错误写法等;4)强调运算符优先级记忆困难时应多用括号;5)提供判断奇偶、避免除零等实用技巧。文中多次提醒注意编码规范,建议通过实践掌握这些基础但易错的概念。

2026-06-09 21:28:21 239

原创 C语言结构体指针与硬件访问笔记(实战派)

本文介绍了结构体指针在硬件访问中的应用。主要内容包括:1)结构体指针定义与成员访问方式(->操作符);2)通过结构体指针映射硬件寄存器的原理与实现方法;3)关键注意事项如volatile修饰、内存对齐、位域使用等;4)给出了GPIO控制LED的完整示例。重点阐述了利用结构体指针访问硬件时,如何确保寄存器布局与硬件手册一致,以及为何必须使用volatile防止编译器优化。这种技术广泛用于嵌入式开发,可大幅提升硬件访问代码的可读性和可维护性。

2026-06-09 21:26:41 354

原创 C语言多维数组与指针数组笔记(别搞混了)

本文系统讲解了C语言中多维数组、指针数组和数组指针的概念与应用。主要内容包括:1) 二维数组的内存布局和元素访问方式;2) 二维数组与指针的关系,特别是数组指针int (*)[N]的使用;3) 指针数组的定义和动态模拟二维数组的方法;4) 指针数组与二维数组的关键区别;5) 数组指针与指针数组的语法区分;6) 实际应用示例(字符串排序);7) 常见错误和注意事项。文章强调通过内存布局理解和区分这些概念,并提供了实用的编程建议和记忆技巧。

2026-06-04 13:45:32 175

原创 C语言数组与指针关系笔记(透彻版)

本文系统讲解了C语言中数组与指针的核心概念和用法。主要内容包括:1)数组是连续内存空间,元素类型相同;2)数组初始化、访问及越界问题;3)数组内存布局和地址计算;4)数组名与指针的关系及区别;5)指针运算与数组遍历;6)二维数组与指针;7)数组作为函数参数时的退化特性;8)字符数组与字符串指针;9)指针数组与数组指针的区别;10)实用技巧与常见陷阱。强调理解内存连续性和类型大小是关键,建议通过画图和实例来掌握数组与指针的密切关系。

2026-06-04 13:43:44 222

原创 C语言位运算与指针操作笔记(实战向)

但注意:很多硬件寄存器要求对齐访问(比如必须4字节对齐),你用char*访问可能触发总线错误。结果是-4,但如果你想要无符号逻辑右移,用 (unsigned int)b >> 2。实际是:读,改,写。注意:用unsigned类型做位运算,防止右移时符号位扩展(负数的右移是算术右移,补1不是补0,很坑)。同样一个地址,int访问4字节,char访问1字节。类型选择:想操作1字节用char*,4字节用int*,但要确保硬件支持。嵌入式里寄存器就是内存地址,用指针指过去,然后用位运算改它的bit。

2026-05-16 19:21:38 334

原创 C语言指针笔记(硬核但有用)

本文系统总结了C语言指针的核心知识点:指针本质是存储内存地址的变量,用于函数传参、动态内存分配和数组遍历等场景。详细讲解了指针的定义、解引用、初始化注意事项,以及指针与数组的关系。重点阐述了指针类型的重要性,包括地址偏移计算和解引用宽度控制。特别介绍了硬件访问场景下的指针应用技巧,如绝对地址转换、volatile关键字使用和寄存器结构体映射。最后给出类型匹配警告和硬件操作建议。全文通过代码示例直观展示指针操作,强调实践出真知的学习方法。

2026-05-16 19:21:05 349

原创 C语言运算笔记(算术 + 赋值)

本文总结了C语言中算术运算符的使用要点:1)整数除法会截断小数,取余运算仅限整数;2)复合赋值运算符(如+=)能简化代码但需注意写法;3)运算符优先级中括号最高,赋值最低;4)类型转换需注意隐式转换规则,避免整数除法错误;5)取余运算结果符号与被除数一致。通过实例说明了常见错误及解决方法,建议通过实践加深理解。

2026-05-02 13:57:04 211

原创 C语言变量那些破事(深入一点)

本文深入探讨C语言变量的进阶知识,包括变量的内存本质、声明与定义区别、存储类别(auto/register/static/extern)、作用域规则、生命周期特性、内存布局(栈/堆/数据段等)以及const/volatile等修饰符。重点剖析了static变量的持久性、全局变量的初始化规则、局部变量的随机值问题等常见陷阱,并提供了变量选择策略建议。通过理解这些底层机制,可以避免段错误、内存泄漏等典型问题,为掌握指针和多线程编程奠定基础。

2026-05-02 13:56:15 342

原创 C语言原码、反码、补码笔记(看完不懵)

0 = 0 0000000,-0 如果用反码+1会变成 1 0000000,但8位里这个数被用做-128了,所以0唯一。熟练了之后,直接用“256-绝对值”算补码也行:-3 的补码 = 256-3=253 = 11111101。你看到 0xFF 的时候,要意识到它可能不是255,而是 -1(如果当成有符号char)。若最高位是1:负数,先减1,再取反(符号位保持1),得到原码的绝对值,再加负号。负数的反码 = 符号位不变,其他位取反(0变1,1变0)后来才知道,计算机里只有加法器,减法也得用加法来做。

2026-05-01 18:14:41 409

原创 c语言-进制法(基础转换)

本文总结了计算机进制转换的核心方法

2026-05-01 18:02:21 346

原创 C语言变量与数据类型(狗都能听懂)

《C语言数据类型简明指南:从狗狗视角理解变量》 本文用生动比喻讲解C语言基础数据类型:int如骨头数量(整数),float/double似狗粮重量(小数),char像狗名首字母(单个字符)。文章详细演示了变量定义、初始化、命名规则,以及常量的使用方法,并附有sizeof操作符查看数据类型大小的实例。通过"狗子记账本"的完整代码示例,展示如何实际应用这些数据类型。文末强调:变量命名要有意义,常量用const声明,并鼓励读者动手实践。全篇以"狗能懂你更能懂"的轻松口吻,降

2026-04-12 12:52:15 251

空空如也

空空如也

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

TA关注的人

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