# c-learn **Repository Path**: Liangfactory/c-learn ## Basic Information - **Project Name**: c-learn - **Description**: 记录c语言学习的过程 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-07-29 - **Last Updated**: 2026-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C 语言学习项目 按章节组织的 C 语言入门与进阶练习仓库。每个 `.c` 源文件均为独立示例,包含自己的 `main` 函数,可单独编译运行。 ## 适用人群 本项目面向需要系统学习 C 语言基础知识的备考同学,尤其适合: - **专升本考试**:计算机类专业常考 C 语言程序设计,涵盖数据类型、流程控制、数组、指针、函数、结构体等核心考点 - **考研初试**:408 数据结构等科目以 C 语言为描述语言,扎实的 C 基础有助于理解算法与数据结构的实现 - **零基础入门**:希望从零开始,按章节循序渐进掌握 C 语言 内容覆盖专升本、考研 C 语言考试的主流知识点,建议配合章节示例代码动手练习,而非只看不写。 ## 推荐开发环境:CLion 推荐使用 [JetBrains CLion](https://www.jetbrains.com/clion/) 学习本项目,原因如下: | 优势 | 说明 | |------|------| | CMake 原生支持 | 本项目基于 CMake 构建,CLion 可自动识别 `CMakeLists.txt` 并生成全部可执行目标 | | 调试方便 | 支持断点、单步执行、变量监视,适合理解指针、内存等难点 | | 代码导航 | 快速跳转定义、查看函数调用关系 | | 已预配置 | 项目包含 `.idea` 配置,用 CLion 直接打开即可使用 | ### CLion 安装与激活(仅供学习用途) 1. 从 [JetBrains 官网](https://www.jetbrains.com/clion/download/) 下载并安装 CLion 2. 安装 C 编译器: - **Windows**:安装 [MinGW-w64](https://www.mingw-w64.org/) 或 Visual Studio(含 MSVC 工具链) - **macOS**:安装 Xcode Command Line Tools(`xcode-select --install`) - **Linux**:`sudo apt install build-essential`(Debian/Ubuntu) 3. 激活教程(仅供个人学习使用,请支持正版):[CLion 激活教程](https://devbyte.top/blog/131282) > 学习完成后,建议购买正版 License 支持开发者。学生可申请 [JetBrains 免费教育 License](https://www.jetbrains.com/community/education/)。 ## CLion + CMake 配置教程 ### 第一步:用 CLion 打开项目 1. 启动 CLion,选择 **Open** 2. 选择本项目根目录(包含 `CMakeLists.txt` 的 `c-code` 文件夹) 3. CLion 自动检测 CMake 项目并开始加载,等待右下角进度完成 ### 第二步:确认 CMake 配置 打开 **File → Settings → Build, Execution, Deployment → CMake**(macOS 为 **Preferences**),确认以下项: | 配置项 | 建议值 | |--------|--------| | CMake options | `-DCMAKE_BUILD_TYPE=Debug` | | Build directory | `cmake-build-debug` | | CMake version | ≥ 3.30(与 `CMakeLists.txt` 要求一致) | 若 CLion 提示 CMake 版本过低,可在 **Settings → Build, Execution, Deployment → CMake** 中指定本机已安装的新版 CMake 路径。 ### 第三步:选择并运行目标 本项目每个 `.c` 文件对应一个 CMake 可执行目标(如 `01-Hello`、`01-pointer`)。 1. 右上角运行配置下拉框中选择目标(例如 `01-Hello`) 2. 点击绿色运行按钮 ▶ 或按 `Shift + F10` 3. 输出显示在底部 **Run** 窗口 也可在 **File → Settings → Build, Execution, Deployment → CMake** 旁的 **Reload CMake Project** 刷新目标列表。 ### 第四步:调试代码 1. 在代码行号左侧点击设置断点 2. 点击虫子图标 🐛 或按 `Shift + F9` 进入调试 3. 使用 **Step Over(F8)**、**Step Into(F7)** 单步执行,在 **Variables** 窗口查看变量值 调试对理解指针运算、数组与指针关系、递归调用等考点非常有帮助。 ### 第五步:新增示例到 CMake(可选) 若自行添加了新的 `.c` 练习文件,在 `CMakeLists.txt` 末尾追加一行: ```cmake add_executable(你的目标名 路径/你的文件.c) ``` 保存后 CLion 会提示 **CMake project needs to be reloaded**,点击 **Load CMake Project** 即可在运行配置中看到新目标。 本项目 `CMakeLists.txt` 核心结构如下: ```cmake cmake_minimum_required(VERSION 3.30) project(c_code C) set(CMAKE_C_STANDARD 99) # 每个源文件单独生成一个可执行文件 add_executable(01-Hello chapter01/01-Hello.c) # ... 更多目标 ``` ### 常见问题 | 问题 | 解决方法 | |------|----------| | 找不到编译器 | Settings → Build, Execution, Deployment → Toolchains,配置 MinGW / MSVC / GCC 路径 | | CMake 加载失败 | 检查 CMake 版本是否 ≥ 3.30,或降低 `cmake_minimum_required` 版本 | | 运行无输出 | 确认右上角选择了正确的可执行目标,而非 `All targets` | | 中文乱码 | Settings → Editor → File Encodings,设为 UTF-8 | ## 环境要求 | 工具 | 版本要求 | |------|----------| | CMake | ≥ 3.30 | | C 编译器 | 支持 C99(GCC、Clang、MSVC 等) | | IDE(推荐) | CLion(项目已配置 `.idea`) | ## 快速开始 ### 使用 CMake 构建(命令行) ```bash # 在项目根目录 cmake -B cmake-build-debug -DCMAKE_BUILD_TYPE=Debug cmake --build cmake-build-debug ``` ### 运行示例 构建完成后,可执行文件位于 `cmake-build-debug/` 目录下,名称与 CMake 目标一致: ```bash # Windows cmake-build-debug\01-Hello.exe # Linux / macOS ./cmake-build-debug/01-Hello ``` ### 单文件编译(无需 CMake) ```bash gcc chapter01/01-Hello.c -o hello ./hello # Linux / macOS hello.exe # Windows ``` ## 项目结构 ``` c-code/ ├── CMakeLists.txt # CMake 构建配置 ├── main.c # 独立 Hello World(未纳入 CMake) ├── chapter01/ # 基础入门 ├── chapter02-variable/ # 变量与数据类型 ├── chapter03-OperatorsAndFlowControl/ # 运算符与流程控制 ├── chapter04-array/ # 数组 ├── chapter05-pointer/ # 指针 ├── chapter06-function/ # 函数 ├── chapter07-struct/ # 结构体 ├── chapter08-function/ # 标准库与内存管理 ├── chapter09-fileOperation/ # 文件操作 ├── C程序.md # C 程序基础说明 ├── C程序-基础语法.md # 基础语法笔记 └── C语言学习项目总结.md # 各章节知识点总结 ``` ## 章节内容 ### Chapter 01 — 基础入门 | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-Hello.c` | Hello World、注释、`main` 函数 | `01-Hello` | | `02-printf.c` | `printf` 格式化输出 | `02-printf_` | | `03-Base.c` | C 程序基本结构 | `03-Base` | ### Chapter 02 — 变量与数据类型 | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-Identifier.c` | 标识符规则 | `01-Identifier` | | `02-Variable.c` | 变量定义与使用 | `02-Variable` | | `03-Int.c` | 整型 | `03-Int` | | `04-FloatDouble.c` | 浮点型 `float` / `double` | `04-FloatDouble` | | `05-Char.c` | 字符型 | `05-Char` | | `06-Boolean.c` | 布尔类型 | `06-Boolean` | | `07-ValueConvert.c` | 类型转换 | `07-ValueConvert` | | `08-Constant.c` | 常量 | `08-Constant` | | `09-IO.c` | 基本输入输出 | `09-IO` | | `10-Binary.c` | 二进制表示 | `10-Binary` | ### Chapter 03 — 运算符与流程控制 **运算符** (`operator/`) | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-Ari.c` | 算术运算符 | `01-Ari` | | `02-SetValue.c` | 赋值运算符 | `02-SetValue` | | `03-Compare.c` | 比较运算符 | `03-Compare` | | `04-Logic.c` | 逻辑运算符 | `04-Logic` | | `05-Bit.c` | 位运算符 | `05-Bit` | | `06-Condition.c` | 条件运算符 | `06-Condition` | | `07-SizeOf.c` | `sizeof` 运算符 | `07-SizeOf` | **流程控制** (`structure/`) | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-if-else.c` | `if-else` 分支 | `01-if-else` | | `02-switch-case.c` | `switch-case` 分支 | `02-switch-case` | | `03-for-cycle.c` | `for` 循环 | `03-for-cycle` | | `04-while.c` | `while` 循环 | `04-while` | | `05-do-while.c` | `do-while` 循环 | `05-do-while` | | `06-cycle.c` | 循环综合练习 | `06-cycle` | | `07-goto.c` | `goto` 语句 | `07-goto` | ### Chapter 04 — 数组 | 文件 | 说明 | CMake 目标 | |------|------|------------| | `arr/01-arr.c` | 数组基础 | `01-arr` | | `arr/02-arr-copy.c` | 数组复制 | `02-arr-copy` | | `arr/03-arr-reverse.c` | 数组反转 | `03-arr-reverse` | | `arr/04-char-arr-str.c` | 字符数组与字符串 | `04-char-arr-str` | | `arrs/01-arrs.c` | 多维数组 | `01-arrs` | ### Chapter 05 — 指针 | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-pointer.c` | 指针基础 | `01-pointer` | | `02-pointer-calc.c` | 指针运算 | `02-pointer-calc` | | `03-wild-pointer.c` | 野指针 | `03-wild-pointer` | | `04-multiple-pointer.c` | 多级指针 | `04-multiple-pointer` | | `05-pointer-array/01-one-array-pointer.c` | 一维数组与指针 | `01-one-array-pointer` | | `05-pointer-array/02-two-array-pointer.c` | 二维数组与指针 | `02-two-array-pointer` | | `05-pointer-array/03-pointer-array.c` | 指针数组 | `03-pointer-array` | | `05-pointer-array/04-strArray-vs-strPointer.c` | 字符数组 vs 字符指针 | `04-strArray-vs-strPointer` | | `05-pointer-array/05-str-arr.c` | 字符串数组 | `05-str-arr` | | `05-pointer-array/06-len-array-pointer.c` | 变长数组指针 | `06-len-array-pointer` | ### Chapter 06 — 函数 | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-function.c` | 函数基础 | — | | `02-function.c` | 函数定义与调用 | `02-function` | | `03-function-senior/01-function-recursion.c` | 递归 | `01-function-recursion` | | `03-function-senior/02-function-variable-param.c` | 可变参数 | `02-function-variable-param` | | `03-function-senior/03-pointer-function.c` | 指针作为函数参数 | — | | `03-function-senior/04-function-pointer.c` | 函数指针 | — | | `03-function-senior/05-callback-function.c` | 回调函数 | — | | `03-function-senior/06-function-specifier.c` | 函数说明符 | `06-function-specifier` | | `04-variable/01-localtor-variable.c` | 局部变量 | `01-localtor-variable` | | `04-variable/02-stored-variable.c` | 静态变量 | `02-stored-variable` | | `04-variable/03-other-variables.c` | 其他变量类型 | `03-other-variables` | ### Chapter 07 — 结构体 | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-struct-base.c` | 结构体基础 | `01-struct` | | `02-struct.c` | 结构体成员访问 | `02-struct` | | `03-struct-array.c` | 结构体数组 | `03-struct-array` | | `04-struct-pointer.c` | 结构体指针 | `04-struct-pointer` | | `05-array-pointer.c` | 结构体数组指针 | `05-array-pointer` | | `06-struct-application.c` | 结构体应用(链表) | `06-struct-application` | | `07-struct-union.c` | 联合体 | `07-struct-union` | | `08-typedef.c` | `typedef` 类型别名 | `08-typedef` | ### Chapter 08 — 标准库与内存管理 | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-str-function.c` | 字符串处理函数 | `01-str-function` | | `02-ConversionBasicTypesAndStrings.c` | 基本类型与字符串转换 | `02-ConversionBasicTypesAndStrings` | | `03-dateAndTime.c` | 日期与时间 | `03-dateAndTime` | | `04-mathematical-operations.c` | 数学运算 | `04-mathematicalOperations-function` | | `05-memory-management.c` | 动态内存管理 | `05-memory-management` | | `06-demo.c` | 综合示例 | `06-demo` | ### Chapter 09 — 文件操作 | 文件 | 说明 | CMake 目标 | |------|------|------------| | `01-io.c` | 标准输入输出流 | `01-io` | | `02-read-write.c` | 文件读写 | `02-read-write` | > `02-read-write.c` 中文件路径为硬编码的绝对路径,运行前请根据实际情况修改 `fopen` 路径,或改为相对路径。 ## 构建说明 - 标准:C99(`CMAKE_C_STANDARD 99`) - 每个源文件对应一个可执行目标,便于逐节练习 - 默认构建目录:`cmake-build-debug/` - 部分源文件尚未加入 `CMakeLists.txt`,可使用 `gcc` 单独编译(见上表标注为 `—` 的文件) ## 相关文档 | 文件 | 内容 | |------|------| | [C程序.md](C程序.md) | C 程序组成与编译步骤 | | [C程序-基础语法.md](C程序-基础语法.md) | 基础语法笔记 | | [C语言学习项目总结.md](C语言学习项目总结.md) | 各章节知识点汇总 | | [三种循环结构.md](chapter03-OperatorsAndFlowControl/structure/三种循环结构.md) | 循环结构对比说明 | ## 学习路线建议 1. **入门**:Chapter 01 → Chapter 02(语法与数据类型) 2. **控制流**:Chapter 03(运算符与分支、循环) 3. **数据结构**:Chapter 04(数组)→ Chapter 05(指针) 4. **模块化**:Chapter 06(函数)→ Chapter 07(结构体) 5. **进阶**:Chapter 08(标准库、内存管理)→ Chapter 09(文件 I/O)