C语言基础学习-X0前置

目录

1、计算机

2、项目文件

3、符号含义

4、内存空间


1、计算机

中央处理器(CPU)

  • 作用:负责执行计算和逻辑判断的核心部件
  • 组成
    • 运算器(ALU):执行算术和逻辑运算
    • 控制器(CU):由时钟信号同步,协调各部件工作
    • 寄存器:临时存储数据和指令

存储器

  • 内存(RAM):存储正在执行的程序和数据,断电后数据丢失
  • 外存:硬盘、SSD等,用于长期存储

预处理

编译之前要预处理:执行预处理指令

在C语言代码中,以 # 开头的指令就是预处理指令。预处理指令有多种形式,两种最常见的形式:

指令 作用 示例
#include 用于包含头文件 #include <stdio.h>
#define 用于定义宏或常量 #define PI 3.14159

预处理输出文件.i 文件

2、项目文件

项目组织架构(Visual Studio)

层级 说明
解决方案(.sln) 存放多个相关项目的容器
项目(.vcxproj) 单个项目的配置和文件集合

文件分类

头文件(Header Files)
  • 作用 :存放 .h 文件,包含函数声明、结构体定义、宏定义等
  • 创建步骤:右键点击"头文件" → "添加" → "新建项" → 选择"头文件(.h)"
源文件(Source Files)
  • 作用 存放 .c 文件,包含函数的具体实现
  • 创建步骤:右键点击"源文件" → "添加" → "新建项" → 选择"C文件(.c)"
  • ⚠️ 注意:不要选择"C++文件(.cpp)",应直接选择C文件

项目示例结构

复制代码
cpp 复制代码
1LinkedList(项目名称)
2├── 头文件
3│   ├── Link_list.h    (链表结构定义和函数声明)
4│   └── Common.h       (公共定义,如状态码)
5├── 源文件
6│   ├── Link_list.c    (链表函数实现)
7│   ├── main.c         (主函数,用于测试)
8│   └── Test.c         (专门的测试代码)
9└── 其他
10    └── README.md      (项目说明)

3、符号含义

& 运算符

表格

类型 说明 示例
取地址运算符(一元) 获取变量在内存中的地址 int *p = &c4;
按位与运算符(二元) 对两个操作数的每个二进制位进行"与"运算 a & b

取地址运算符常用场景

  • 指针初始化:int *p = &c4;
  • 传递地址给函数:scanf("%d", &c4);
复制代码

按位与运算符常用场景

掩码操作(检查/设置特定位) 底层硬件编程

4、内存空间

C程序内存区域总览

cpp 复制代码
高地址
┌─────────────────┐
│    内核空间     │  ← 操作系统专用,用户程序不可访问
├─────────────────┤
│      栈 Stack   │  ↓ 向下增长
├─────────────────┤
│      堆 Heap    │  ↑ 向上增长
├─────────────────┤
│   未初始化数据   │  (.bss)
│   (BSS段)       │
├─────────────────┤
│   已初始化数据   │  (.data)
│   (数据段)      │
├─────────────────┤
│   只读数据段    │  (.rodata)
├─────────────────┤
│    代码段       │  (.text)
└─────────────────┘
低地址

各区域详解

区域 存储内容 管理方式 生命周期
代码段(.text) 可执行指令 只读 程序启动→结束
只读数据段(.rodata) 字符串常量、const变量 只读 程序启动→结束
已初始化数据段(.data) 显式初始化的全局/静态变量 静态分配 程序启动→结束
未初始化数据段(.bss) 未初始化的全局/静态变量(自动初始化为0) 静态分配 程序启动→结束
堆(Heap) 动态分配的内存 手动管理(malloc/free) 申请→释放
栈(Stack) 局部变量、函数参数、返回地址 自动管理(LIFO) 函数调用→返回

详细说明

1. 栈区(Stack)
  • 存储内容:局部自动变量、函数参数、返回地址、栈帧指针
  • 管理方式:编译器自动分配/释放,遵循「后进先出(LIFO)」规则
  • 空间特性 :大小有限(Linux默认约8MB),递归过深或局部数组过大会触发栈溢出(Stack Overflow)
2. 数据段(Data Segment)
  • .data段 :存储显式初始化的全局变量/静态变量c

    cpp 复制代码
    1int global_a = 10;
    2static int func_static = 20;
  • .bss段 :存储未显式初始化的全局变量/静态变量(编译器自动初始化为0)c

    cpp 复制代码
    1int global_b;
    2static int func_static_b;
  • 生命周期:程序加载时分配,进程结束时由操作系统回收

3. 堆区(Heap)
  • 申请/释放 :C/C++用 malloc/freenew/delete 手动管理
  • 空间特性 :可动态扩展(受物理内存+虚拟内存限制),但易产生内存碎片
  • 风险点
    • 不释放 → 内存泄漏(Memory Leak)
    • 越界访问 → 程序崩溃
4. 代码段(Text Segment)
  • 存储内容:程序的可执行指令
  • 特性:只读(防止运行时被篡改),多进程可共享同一份代码段副本
5. 只读数据段(.rodata)
  • 存储内容 :字符串常量、const 修饰的只读变量c

    cpp 复制代码
    1const int MAX = 100;
    2char *str = "Hello";  // 字符串常量存于.rodata
  • 特性:只读,尝试修改会导致段错误(Segmentation Fault)

6. 内核空间(Kernel Space)
  • 说明:属于操作系统专属内存,用户程序无权直接访问
  • 存储内容:内核代码、设备驱动、进程调度表等
  • 权限:受硬件+操作系统双重保护
相关推荐
存在morning1 分钟前
【Paimon 学习笔记 二】存储架构:快照、manifest、LSM 树、bucket
笔记·学习·架构
en.en..3 分钟前
C语言 static函数与头文件封装规范
java·c语言·前端
海兰6 分钟前
【 Python 量化交易】开篇
开发语言·python·信息可视化·量化交易
双眼鈹24 分钟前
周报8.31
笔记·学习
我的xiaodoujiao40 分钟前
Django 基础知识详细图文教程 4-Django 视图定义与使用
开发语言·数据库·后端·测试工具·django·sqlite
l1t40 分钟前
DeepSeek总结的DuckDB在 CI 中为 release 和 glibc CLI 构建启用 LTO - #24225
开发语言·数据库·ci/cd·duckdb
whitelbwwww42 分钟前
c++运行RKNN
开发语言·c++
2601_962070231 小时前
差异基因富集分析(R语言——GO&KEGG&GSEA)
开发语言·golang·r语言
布莱克6051 小时前
栈(Stack)详解:定义、作用、应用场景及与队列的区别(附 C/C++ 代码)
c语言·开发语言·c++·
zmzb01031 小时前
C++课后习题训练记录Day203
开发语言·c++