当前位置: 首页 > news >正文

C语言基础知识点简单案例分享之二——C语言全知识点速查宝典


🧠 C语言全知识点速查 + 典型案例


🧩 一、C 程序结构与语法基础

知识点说明示例
程序入口C 程序从 main() 函数开始执行int main() { return 0; }
头文件#include 引入库函数声明#include <stdio.h>
输出使用 printf() 打印信息printf("Hello C!\n");
注释// 单行,/* ... */ 多行// This is comment
返回值main() 应返回 intreturn 0; 表示成功结束

🔢 二、变量与数据类型

类型描述示例
整型intshortlongunsignedint a = 10;
浮点floatdoubledouble pi = 3.14;
字符char,存单个字符char c = 'A';
常量const 声明不可改变量const int N = 100;
类型转换强制转换 (type)expr(float)a / b

🧮 三、运算符与表达式

分类示例说明
算术运算+ - * / %整数除法会截断
自增自减++a, a--注意前后缀差异
比较== != > < >= <=返回 0 或 1
逻辑&&, `, !`短路求值
位运算&, `, ^`, `~`, `<<`, `>>`操作二进制位
条件运算cond ? a : b三目运算符

🧩 示例:

int a=5,b=2;
printf("%d %d\n", a/b, a%b); // 2 1

🧭 四、控制结构

结构语法示例
if/else条件执行if(a>0) printf("pos");
switch多分支switch(x){case 1:...}
for计数循环for(int i=0;i<5;i++)
while条件循环while(i<5)
do-while至少执行一次do {...} while(cond);
break / continue跳出循环 / 跳过本次

🧮 五、函数

知识点说明示例
定义返回类型 + 名称 + 参数int add(int a,int b){return a+b;}
调用函数名 + 实参add(3,4);
声明在使用前声明int add(int,int);
值传递函数参数按值复制修改不会影响原变量
递归函数调用自身if(n>0) sum+=f(n-1);

🧱 六、数组与字符串

知识点示例说明
一维数组int a[3]={1,2,3};索引从 0 开始
二维数组int m[2][2];表示矩阵结构
字符串char s[]="Hello";实际存储含 '\0'
字符串函数strlen, strcpy, strcmp来自 <string.h>

🧩 示例:

char s[10] = "Hi";
printf("%lu\n", strlen(s));

🧭 七、指针

概念示例说明
定义int *p;存储变量地址
取地址&a获取变量地址
解引用*p访问指针指向的值
指针运算p+1, p++按类型步长移动
数组指针p = arr;等价于 &arr[0]
函数参数传递swap(&a, &b);允许修改外部变量

🧩 示例:

int x=5; int *p=&x;
printf("%d\n", *p); // 5

⚙️ 八、动态内存管理

函数说明示例
malloc()分配内存(未初始化)int *p = malloc(4*sizeof(int));
calloc()分配并清零calloc(n, sizeof(int));
realloc()重新分配p = realloc(p, newSize);
free()释放内存free(p);

⚠️ 注意:

  • 动态内存来自堆区,需手动释放;
  • free 后指针应设为 NULL
  • 忘记释放 → 内存泄漏

🧱 九、结构体、共用体、枚举

类型示例说明
结构体 structstruct Person {char n[10];int a;};组合不同类型
访问成员p.age, ptr->age使用点或箭头
共用体 unionunion Data {int i; float f;};共享同一内存
枚举 enumenum Color {RED,GREEN,BLUE};自定义整数常量
typedeftypedef unsigned long ulong;创建别名

🗂️ 十、文件操作

函数说明示例
fopen()打开文件FILE *fp=fopen("a.txt","r");
fprintf()写文件fprintf(fp,"Hi");
fscanf()读文件fscanf(fp,"%d",&x);
fgetc()/fputc()读写字符ch=fgetc(fp);
fclose()关闭文件

🧩 示例:

FILE *fp=fopen("test.txt","w");
fprintf(fp,"Hello");
fclose(fp);

⚙️ 十一、预处理与宏

指令说明示例
#define定义宏#define PI 3.14
宏函数参数化宏#define SQR(x) ((x)*(x))
条件编译控制代码块#ifdef DEBUG ... #endif
#include包含头文件

🧩 示例:

#define SQR(x) ((x)*(x))
printf("%d\n", SQR(3)); // 9

🧮 十二、内存模型与存储类别

类别关键字生命周期
自动变量默认(局部)函数结束销毁
静态变量static程序运行期
全局变量函数外定义所有函数可见
外部变量extern跨文件共享

🧩 示例:

void count() { static int x=0; x++; printf("%d ",x); }

🧰 十三、标准库模块(速览)

头文件常用函数
IO<stdio.h>printf, scanf, fopen
字符串<string.h>strlen, strcpy, strcmp
数学<math.h>pow, sqrt, fabs
时间<time.h>time, difftime
内存<stdlib.h>malloc, free, rand
字符<ctype.h>isdigit, toupper

C语言生态体系
我们可以分两部分讲清楚:

1️⃣ C语言的标准库(Standard Library)模块一览
2️⃣ C语言的第三方库(Third-Party Libraries)现状与分类


🧩 一、C语言标准库(C Standard Library)总览

C语言标准库是由 ISO C 标准(如 C89/C90、C99、C11、C17、C23)定义的。
不同版本略有扩展,但核心模块基本固定。

下面是最全的标准头文件列表及用途👇


🧱 1️⃣ 通用与程序控制
头文件功能说明
<assert.h>运行时断言(assert()
<errno.h>错误码定义(如 errno, EIO
<stddef.h>通用类型(size_t, NULL, offsetof
<stdlib.h>内存分配、随机数、程序退出、转换函数等(malloc, free, atoi, exit
<setjmp.h>非本地跳转(setjmp, longjmp
<signal.h>信号处理(signal, raise
<locale.h>地区化设置(setlocale

📖 2️⃣ 输入输出与文件操作
头文件功能说明
<stdio.h>标准输入输出(printf, scanf, fopen, fread, fwrite
<stdio_ext.h> (Glibc 扩展)非标准扩展函数(如 __fpurge

🔢 3️⃣ 数学与数值处理
头文件功能说明
<math.h>数学函数(sin, cos, pow, sqrt
<float.h>浮点数范围常量(FLT_MAX, DBL_MIN
<limits.h>各整数类型范围常量(INT_MAX, CHAR_MIN
<complex.h>复数运算(C99 新增)
<tgmath.h>泛型数学宏,支持自动类型匹配(C99 新增)
<fenv.h>浮点环境控制(如舍入模式、异常标志)(C99 新增)

🧠 4️⃣ 字符与字符串处理
头文件功能说明
<ctype.h>字符分类与转换(isdigit, tolower
<string.h>字符串操作(strlen, strcpy, memcmp

⏰ 5️⃣ 时间与日期
头文件功能说明
<time.h>时间函数(time, difftime, strftime

🧮 6️⃣ 标准类型定义
头文件功能说明
<stdbool.h>布尔类型 _Bool / true / false(C99 新增)
<stdint.h>精确定义的整数类型(int32_t, uint64_t)(C99 新增)
<inttypes.h>整数格式化(PRIu64, SCNd32)(C99 新增)
<stdarg.h>可变参数函数宏(va_list, va_start, va_arg, va_end
<stdalign.h>对齐(C11 新增)
<stdatomic.h>原子操作(C11 新增)
<stdnoreturn.h>noreturn 函数标注(C11 新增)
<stdbool.h>布尔类型定义(C99 新增)
<uchar.h>UTF-16 / UTF-32 字符支持(C11 新增)
<threads.h>多线程支持(thrd_t, mtx_t)(C11 新增)

🧵 7️⃣ 多线程与同步(C11 起)
头文件功能说明
<threads.h>C11 原生线程库(轻量、跨平台)
<stdatomic.h>原子操作(线程安全基础)

✅ 二、C语言标准库总结表(完整版)

分类头文件
通用工具<stdlib.h>, <assert.h>, <stddef.h>, <errno.h>
输入输出<stdio.h>
字符串与字符<string.h>, <ctype.h>
数学<math.h>, <float.h>, <limits.h>, <complex.h>, <tgmath.h>
时间<time.h>
可变参数<stdarg.h>
类型与常量<stdbool.h>, <stdint.h>, <inttypes.h>
系统控制<signal.h>, <setjmp.h>, <locale.h>
线程与原子<threads.h>, <stdatomic.h>
其他<stdalign.h>, <stdnoreturn.h>, <uchar.h>

💡 不同编译器(如 GCC、MSVC、Clang)可能有额外的扩展头文件,但上面是 ISO 标准定义的完整集合


🧩 三、C语言“第三方库”

虽然 C 是一个“轻标准库”语言,但生态极其庞大。
下面是按功能分类的第三方库代表:


⚙️ 1️⃣ 通用工具与基础设施
库名作用
GLibGNOME 项目的基础库(提供容器、字符串、线程、内存工具等)
APR (Apache Portable Runtime)提供跨平台系统接口抽象层
libuv异步 I/O 库(Node.js 核心使用)

📡 2️⃣ 网络与通信
库名作用
libcurlHTTP/FTP/SFTP 客户端库
libevent高性能事件驱动库
ZeroMQ高性能消息传递库
OpenSSL加密通信与证书库

💾 3️⃣ 文件与压缩
库名作用
zlib压缩与解压
libzipZIP 文件操作
bzip2 / lz4各种压缩算法

🧮 4️⃣ 科学计算与数值分析
库名作用
GSL (GNU Scientific Library)数值计算、线性代数、统计
FFTW快速傅里叶变换库
BLAS / LAPACK矩阵运算与线性代数

🧠 5️⃣ 图像、图形与多媒体
库名作用
SDL / SDL2游戏与多媒体开发
OpenGL图形渲染接口
libpng / libjpeg / libtiff图像编解码
FFmpeg / libav音视频编解码与处理

🔒 6️⃣ 安全与加密
库名作用
OpenSSLTLS/SSL 加密、哈希、证书
libsodium现代加密库(安全封装 OpenSSL)
mbedTLS轻量级 TLS 库,常用于嵌入式

⚙️ 7️⃣ 系统与嵌入式
库名作用
lwIP轻量 TCP/IP 协议栈
FreeRTOS实时操作系统内核(C 实现)
libusbUSB 设备访问
POSIX Threads (pthread)多线程库(Unix 环境)

📘 四、总结

类别内容备注
标准库约 25~30 个头文件由 ISO C 定义,所有编译器都支持
第三方库成千上万网络、加密、图形、科学计算、系统封装等
特点轻量核心 + 丰富生态不像 Python 内置很多功能,但 C 的生态更灵活

💡 一句总结:

C 语言标准库只提供最基础的功能(I/O、内存、数学、字符串、时间等),
高级功能几乎都靠第三方库扩展。
这也是 C 的哲学——小而精、开放扩展


⚙️ 十四、函数指针与回调

概念示例说明
定义int (*fptr)(int,int);指向函数的指针
赋值fptr = add;指针指向函数
调用fptr(3,4);等价于 add(3,4)
回调函数将函数作为参数qsort() 用函数比较

🧩 示例:

void hello(){printf("Hi\n");}
void run(void (*f)()){ f(); }
run(hello);

🧩 十五、C99 / C11 特性

新特性说明示例
单行注释//
变长数组int n=5; int a[n];
内联函数inline int sqr(int x){return x*x;}
布尔类型_Bool flag=1;
复数类型_Complex double z;
多线程支持<threads.h> (C11)

🧭 十六、编译与调试流程(GCC)

阶段命令说明
预处理gcc -E a.c -o a.i展开宏和头文件
编译gcc -S a.c -o a.s生成汇编代码
汇编gcc -c a.c -o a.o生成目标文件
链接gcc a.o -o a.exe生成可执行文件
调试gdb a.exe步进、断点调试

🧠 十七、综合案例:统计文本行数

#include <stdio.h>
int main() {FILE *fp = fopen("data.txt", "r");if (!fp) return 1;int lines = 0; char c;while ((c = fgetc(fp)) != EOF)if (c == '\n') lines++;fclose(fp);printf("Total lines: %d\n", lines);return 0;
}

⚡ 十八、常见陷阱与注意事项

问题错误示例正确写法
忘记分号int a=5int a=5;
越界访问a[10]=x;确保索引合法
printf 类型不符%dfloat%f
字符串未以 \0 结尾手动补上终止符
指针悬挂使用已释放内存使用后立即设 NULL
宏缺少括号#define SQR(x) x*x((x)*(x))

🧩 十九、C 学习路线建议

  1. 基础语法 → 熟悉控制结构、函数、数组
  2. 指针与内存 → 理解地址、堆、栈
  3. 结构体与文件 → 熟悉工程常用结构
  4. 调试与内存管理 → 熟悉工具如 gdb、valgrind
  5. 阅读源码 → 建议读 printfstrlen 等实现

http://www.dtcms.com/a/564660.html

相关文章:

  • 怎么找网站局域网电脑做网站服务器
  • 一男一女做那个的动漫视频网站网站怎样推广 优帮云
  • hive常用命令
  • AWS + 飞天CMS:高性能内容站的云端搭建方案
  • 800G光模块:驱动AI与云计算高速互联的核心引擎
  • Python每日一练---第三天:删除有序数组中的重复项
  • U-Net 的输入与输出:通用场景与扩散模型场景解析
  • 李宏毅机器学习笔记39
  • 【代码随想录算法训练营——Day57(Day56周日休息)】图论——53.寻宝
  • PPT+配音生成带旁白的PPT演示视频
  • abp vnext cli无法正常使用,卡在 Checking extensions..,cli修改abp版本及.net版本
  • 萤石摄像头使用NAS作为存储
  • 2025江西省职业院校技能大赛(中职组)移动应用与开发竞赛样题
  • 建站公司哪家好在哪里推广比较好
  • 在 iOS 18 的照片应用,如何批量隐藏截屏?
  • OK3568 Android11 实现 App 独占隔离 CPU 核心完整指
  • 湖南网站建设公司 都来磐石网络泰安营销型网站建设公司
  • Oracle 如何计算 AWR 报告中的 Sessions 数量
  • JavaScript 流程控制语句
  • 走向专精:我的NLP特化算子开发之旅
  • 如何写prompt?prompt收集
  • 打工人日报#20251103
  • 技术文章大纲:设备如何“开口说话”?
  • CH585 高速 USB模拟 CDC串口应用示例
  • 2024/07 JLPT听力原文 问题四
  • 【AAOS】【源码分析】Car Location服务(二)- NMEA 数据
  • 如何建立国外网站搜索引擎优化岗位
  • 怎么建立网站网址在线做网站需要什么
  • https 可以访问 8866端口吗
  • python excel转为jsonl 格式 和 jsonl格式转为excel