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)
  • 说明:属于操作系统专属内存,用户程序无权直接访问
  • 存储内容:内核代码、设备驱动、进程调度表等
  • 权限:受硬件+操作系统双重保护
相关推荐
-Rane1 小时前
【C++】vector
开发语言·c++·算法
电饭叔2 小时前
python转换字符串介绍
开发语言·windows·python
希望之晨2 小时前
c++ 11 学习 override
开发语言·c++·学习
Mrliu__2 小时前
Python高级技巧(六):正则表达式
开发语言·python·正则表达式
学编程的闹钟2 小时前
E语言组件开发全攻略
学习
普通网友2 小时前
PL/SQL语言的正则表达式
开发语言·后端·golang
winfreedoms2 小时前
Puppypi——树莓派5主板学习笔记
笔记·学习
(initial)2 小时前
B-02. Shared Memory 深度优化:从 Bank Conflict 到 Tensor Core Swizzling
开发语言·c#
消失的旧时光-19432 小时前
智能指针(四):体系篇 —— 现代 C++ 内存管理全景图
开发语言·c++