C 语言语法速查表 - C 语言常用语法与指针编程大全
这套速查给用 C 写嵌入式、操作系统或高性能代码的开发者,这里不像托管语言,内存和指针生命周期都得自己盯。内容覆盖数据类型与常量、控制流、最容易埋坑的指针与数组关系、函数、手动 malloc/free、文件 I/O 和预处理器。条目按你在写哪一类构造块来分,并标记出容易写错的地方。读完应能分清何时用指针、何时用数组,把 malloc/free 管好不漏不悬垂,并用 #ifdef 把编译期逻辑写进代码。
数据类型与变量 8
int x = 10;声明有符号整型变量,范围通常 32 位,跨平台时注意位宽差异
float pi = 3.14f;单精度浮点,约 7 位有效数字,末尾 f 后缀表明是 float
double e = 2.718;双精度浮点,约 15 位有效数字,需要精度时默认用 double 而不是 float
char c = 'A';字符变量占 1 字节,值为其 ASCII 编码(A=65),单引号括字符
char str[] = "Hello";字符串实为以 \0 结尾的字符数组,洗它时牢记最后一个空闲字节是结束符
const int MAX = 100;用 const 声明只读常量,赋值后再改会编译报错
enum {RED, GREEN, BLUE};枚举批量命名一组整型常量,默认从 0 递增
typedef int Integer;给已有类型起别名,改善可读性、便于跨平台换底层类型
控制流 8
if (x > 0) { } else if (x < 0) { } else { }条件分支
switch (x) { case 1: break; default: break; }多路分支
for (int i = 0; i < n; i++) { }for 循环
while (condition) { }while 循环
do { } while (condition);do-while 循环
break;跳出循环/switch
continue;跳过本次循环
goto label;跳转(慎用)
指针与数组 8
int *p;指针声明
int x = 10; int *p = &x;取地址
*p = 20;解引用
int arr[5] = {1, 2, 3, 4, 5};数组初始化
int *p = arr;数组名即首地址
*(p + i)指针算术(等价 arr[i])
int **pp;二级指针
void *vp;通用指针
函数 6
int add(int a, int b) { return a + b; }函数定义
void swap(int *a, int *b);函数声明(原型)
int (*fp)(int, int) = add;函数指针
static int count = 0;静态局部变量
extern int globalVar;外部变量声明
inline int square(int x) { return x * x; }内联函数
内存管理 7
int *p = (int *)malloc(sizeof(int) * 10);动态分配内存
int *p = (int *)calloc(10, sizeof(int));分配并初始化为 0
p = (int *)realloc(p, sizeof(int) * 20);重新分配内存
free(p);释放内存
memset(p, 0, size);内存初始化
memcpy(dest, src, size);内存拷贝
memmove(dest, src, size);安全内存拷贝(可重叠)
结构体与联合体 6
struct Point { int x; int y; };结构体定义
struct Point p = {1, 2};结构体初始化
p.x = 10;访问成员
struct Point *pp = &p; pp->x = 10;指针访问成员
union Data { int i; float f; };联合体(共享内存)
typedef struct { int x; int y; } Point;结构体别名
文件操作 8
FILE *fp = fopen("file.txt", "r");打开文件(r/w/a/rb/wb)
fclose(fp);关闭文件
fscanf(fp, "%d", &x);格式化读取
fprintf(fp, "%d\n", x);格式化写入
fread(buf, size, count, fp);二进制读取
fwrite(buf, size, count, fp);二进制写入
fgets(buf, size, fp);读取一行
fseek(fp, offset, SEEK_SET);文件定位
预处理器 7
#include <stdio.h>包含系统头文件
#include "myheader.h"包含自定义头文件
#define MAX 100宏定义
#define SQUARE(x) ((x) * (x))宏函数
#ifdef DEBUG ... #endif条件编译
#ifndef HEADER_H ... #define HEADER_H ... #endif头文件保护
#pragma once现代头文件保护
提示
- malloc 分配后务必检查返回值是否为 NULL。
- free 后建议将指针置为 NULL,避免野指针。
- 数组名在大多数表达式中会退化为指针,但 sizeof(arr) 仍是整个数组大小。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。