自用学习笔记 C语言基础篇 📅 2026/8/11 3:42:26 C基础 ver.26/08/101.C语言的基础概念C语言支持结构化编程强调程序逻辑的清晰、模块化和易维护。C语言不完全依赖于平台具有良好的可移植性C语言编写的程序可以在不同的平台上编译并运行只需要进行一些小的调整或重新编译而不需要对整个程序做出大的修改。C语言不强制使用面向对象编程OOP而是通过函数和控制结构来组织代码。并且它也不支持面向对象编程。C语言的类型系统是强类型的要求在变量使用之前必须明确声明类型保证程序的类型安全。C语言支持低级内存操作如指针操作允许开发人员直接访问硬件和内存。这使得C语言特别适合于开发操作系统、嵌入式系统等对硬件控制要求较高的程序。它不像高级语言那样需要虚拟机或解释器因此能够更精细地控制资源的使用。C语言是一种编译型语言它生成的机器码具有较高的执行效率适合用于需要高性能的应用如操作系统、嵌入式开发等。与解释型语言相比C语言的程序在运行时更接近机器语言执行速度较快。2.C语言的编译工具使用gcc作为编译工具流程为预处理 编译 汇编 链接预处理器 (cpp)gcc -E编译器 (gcc)gcc -S汇编器 (as)gcc -c链接器 (ld)gccHello.cHello.iHello.sHello.o可执行文件gcc -E hello.c -o hello.i // 预处理gcc -S hello.i -o hello.s // 编译gcc -c hello.s -o hello.o // 汇编gcc hello.o -o hello // 链接2.1 预处理器:cpp 头文件包含、宏替换、条件编译、去掉注释2.2 编译器: gcc C文件编译为汇编文件2.3 汇编器: as 汇编文件转换为二进制文件2.4 链接器: ld 将多个目标文件和库文件链接成最终的可执行文件3.C语言的main()函数程序始终从main()函数开始执行并且一个程序有且只有一个main()函数它是程序的入口也被叫做主函数。在C99标准中只有以下两种定义方式是正确的int main() int main(void) /无参数形式/int main(int argc, charargv[]) /带参数形式/其中argc应该是非负数。argv[]应当是一个空指针。4.进制转换与存储单位4.1 示例10110 0x2º1x2¹1x2²0x2³0x2⁴ 224.2 存储单位位bit:二进制位的一个数位可以是0或者是1是计算机中数据的最小单位。字节ByteB计算机中数据的基本单位每8位组成一个字节。各种信息在计算机中存储处理至少需要一个字节。KB: 早期用的软盘有360KB和720KB的不过软盘已经很少使用。MB: 早期微型机的内存有128MB、256MB、512MB目前内存都是1GB、2GB甚至更大。GB: 早期微型机的硬盘有60GB、80GB目前都是500GB、1TB甚至更大。TB: 目前个人用的微型机存储容量也都能达到这个级别了而作为服务器或者专门的计算机不可缺少这么大的存储容量。1B 8bits1KB 1024B 2 10 2^{10}210B5.变量的定义与分类变量是用来存储数据的被命名的内存位置。变量需要用一个有名字的、具有特定属性的存储单元来存放数据。变量必须先定义后使用或先声明后使用定义时指定名字和类型也可以指定初值。存储类型 数据类型 变量名 初始值5.1 1、存储类型说明符用于控制变量的存储位置、生命周期和作用域。auto局部变量默认关键字只能用于函数内或块内static声明为静态变量生命周期为整个程序但作用域受限extern声明为外部变量全局变量的默认存储类型register建议编译器将变量存储在寄存器中以提高访问速度typedef用于定义类型5.2 2、数据类型说明符用于定义变量或函数的基本数据类型。int整数类型4个字节signed有符号整型unsigned无符号整型short短整型2个字节char字符类型1个字节long长整型4个字节float浮点型4个字节double双精度浮点型8个字节bool布尔类型void空类型声明函数无返回值或无参数或未定义指针类型5.3 变量的命名规则1只能由字母包括大写和小写、数字和下划线 _ 组成2不能以数字开头3长度不超过36个字符4变量名区分大小写5变量名不能使用关键字5.4 变量的作用域作用域定义了变量在代码中的可见范围。C语言的作用域包括局部作用域指的是变量仅在某个特定的函数、代码块中可见和可用。局部作用域的变量被称为局部变量。全局作用域指的是变量在整个程序的范围内可见即程序中的任何函数或任何代码块都可以访问该变量。全局作用域的变量被称为全局变量。特性局部作用域全局作用域定义位置函数或代码块内部函数外部通常位于文件的最顶端作用范围仅限于定义它的函数或代码块内部整个文件甚至可以通过extern跨文件访问生命周期从进入代码块开始到代码块结束从程序启动到程序结束存储位置栈区静态存储区初始值未初始化时为未定义值随机值未初始化时为 0命名冲突的处理不同函数和代码块可定义同名变量互不影响冲突可能导致难以调试和维护5.5 变量的生命周期变量的生命周期是指变量从创建到销毁的整个过程。变量类型存储位置生命周期作用域自动变量auto栈stack随着函数或代码块的进入创建离开销毁定义它的函数或代码块静态局部变量static静态数据区从程序开始到程序结束只初始化一次定义它的函数内部静态全局变量static静态数据区从程序开始到程序结束定义它的文件内部外部变量extern静态数据区从程序开始到程序结束可以在其他文件中通过extern声明访问5.6 使用变量注意事项1、变量必须先声明后使用。2、变量一旦声明就不能再更改其类型。3、同一个作用域内不能命名重名的变量。4、变量遮蔽当在一个嵌套的作用域中定义了与外部作用域中同名的变量时内部变量会遮蔽外部变量。需要注意变量的实际作用域以避免意外的结果。示例 int x 10; void func() { int x 20; //遮蔽了外部x printf(%d\n, x); //输出20 } printf(%d\n, x); //输出104、注意变量的占用空间和取值范围5、注意变量的初始化欢迎使用Markdown编辑器你好 这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持除了标准的Markdown编辑器功能我们增加了如下几点新功能帮助你用它写博客全新的界面设计将会带来全新的写作体验在创作中心设置你喜爱的代码高亮样式Markdown将代码片显示选择的高亮样式进行展示增加了图片拖拽功能你可以将本地的图片直接拖拽到编辑区域直接展示全新的KaTeX数学公式语法增加了支持甘特图的mermaid语法1功能增加了多屏幕编辑Markdown文章功能增加了焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置等功能功能按钮位于编辑区域与预览区域中间增加了检查列表功能。功能快捷键撤销Ctrl/CommandZ重做Ctrl/CommandY加粗Ctrl/CommandB斜体Ctrl/CommandI标题Ctrl/CommandShiftH无序列表Ctrl/CommandShiftU有序列表Ctrl/CommandShiftO检查列表Ctrl/CommandShiftC插入代码Ctrl/CommandShiftK插入链接Ctrl/CommandShiftL插入图片Ctrl/CommandShiftG查找Ctrl/CommandF替换Ctrl/CommandG合理的创建标题有助于目录的生成直接输入1次#并按下space后将生成1级标题。输入2次#并按下space后将生成2级标题。以此类推我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。如何改变文本的样式强调文本强调文本加粗文本加粗文本标记文本删除文本引用文本H2O is是液体。210运算结果是 1024.插入链接与图片链接: link.图片:带尺寸的图片:居中的图片:居中并且带尺寸的图片:当然我们为了让用户更加便捷我们增加了图片拖拽功能。如何插入一段漂亮的代码片去博客设置页面选择一款你喜欢的代码片高亮样式下面展示同样高亮的代码片.// An highlighted blockvarfoobar;生成一个适合你的列表项目项目项目项目1项目2项目3计划任务完成任务创建一个表格一个简单的表格是这么创建的项目Value电脑$1600手机$12导管$1设定内容居中、居左、居右使用:---------:居中使用:----------居左使用----------:居右第一列第二列第三列第一列文本居中第二列文本居右第三列文本居左SmartyPantsSmartyPants 是一个文本转换工具主要功能是将普通的 ASCII 标点符号自动转换为更美观的印刷体标点符号。例如原始符号转换后说明引号“引号”直引号变弯引号单引号‘单引号’直单引号变弯单引号--–两个连字符变短破折号---—三个连字符变长破折号...…三个点变省略号创建一个自定义列表MarkdownText-to-HTMLconversion toolAuthorsJohnLuke如何创建一个注脚一个具有注脚的文本。2注释也是必不可少的Markdown将文本转换为HTML。KaTeX数学公式您可以使用渲染LaTeX数学表达式 KaTeX:Gamma公式展示Γ ( n ) ( n − 1 ) ! ∀ n ∈ N \Gamma(n) (n-1)!\quad\forall n\in\mathbb NΓ(n)(n−1)!∀n∈N是通过欧拉积分Γ ( z ) ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) \int_0^\infty t^{z-1}e^{-t}dt\,.Γ(z)∫0∞tz−1e−tdt.你可以找到更多关于的信息LaTeX数学表达式here.新的甘特图功能丰富你的文章2014-01-072014-01-092014-01-112014-01-132014-01-152014-01-172014-01-192014-01-21已完成进行中计划一计划二现有任务Adding GANTT diagram functionality to mermaid关于甘特图语法参考 这儿,UML图表可以使用UML图表进行渲染例如下面产生的一个序列图王五李四张三王五李四张三李四想了很长时间, 文字太长了不适合放在一行.你好李四, 最近怎么样?你最近怎么样王五我很好谢谢!我很好谢谢!打量着王五...很好... 王五, 你怎么样?关于UML图表语法参考 这儿,流程图链接长方形圆圆角长方形菱形关于Mermaid语法参考 这儿,FLowchart流程图我们依旧会支持flowchart.js的流程图语法Created with Raphaël 2.3.0开始我的操作确认结束yesno关于Flowchart流程图语法参考 这儿.导出与导入导出如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到文章导出生成一个.md文件或者.html文件进行本地保存。导入如果你想加载一篇你写过的.md文件在上方工具栏可以选择导入功能进行对应扩展名的文件导入继续你的创作。mermaid语法说明 ↩︎注脚的解释 ↩︎