目录
前言
1. 基础语法
2. 流程控制
3. 函数
4. 数组与字符串
5. 指针(核心重点)
6. 内存管理
7. 结构体与联合体
8. 文件操作
9. 预处理器
10. 高级特性
内存布局图解
前言
在进行程序代码开发之前,需要掌握好C语言各个模块之间的内容。在TI开发板时,需要对C语言有更好的理解和应用,其中,主要考察的是对代码的操作和库函数的调用。因此,对于本次比赛内容,重新对C语言知识进行讲解。
1. 基础语法
模块 | 内容 | 示例 | 要点 | ||
---|---|---|---|---|---|
数据类型 | 基本类型、派生类型 | int a; float b; char c; | 内存占用:char(1B) int(4B) float(4B) double(8B) | ||
变量与常量 | 变量声明/初始化、常量定义 | const int MAX=100; | 命名规则:字母/数字/下划线,区分大小写 | ||
运算符 | 算术、关系、逻辑、位运算 | a & b; c << 2; | 优先级:`() > ! > 算术 > 关系 > && > | > 赋值` | |
输入输出 | printf() /scanf() | printf("%d,%f", num, f); | 格式符:%d 整型 %f 浮点 %c 字符 |
2. 流程控制
类型 | 语法结构 | 示例 | 应用场景 |
---|---|---|---|
条件语句 |
|
if(score>90) grade='A';
else if(score>60) grade='B';
| 多分支判断 |
| 循环结构 | for
while
do-while
|
for(int i=0; i<10; i++){sum += i;
}
| 重复操作 |
| 跳转语句 | break
continue
goto
|
while(1){if(error) break;
}
| 中断循环/函数返回 |
3. 函数
模块 | 内容 | 示例 | 要点 |
---|---|---|---|
函数定义 | 返回值类型、参数列表 |
int add(int a, int b) {return a+b;
}
| 需先声明后使用 |
| 参数传递 | 值传递、地址传递 |
void swap(int *x, int *y) {int t=*x; *x=*y; *y=t;
}
| 地址传递可修改实参 |
| 递归函数 | 函数调用自身 |
int factorial(int n) {if(n<=1) return 1;return n*factorial(n-1);
}
| 需有终止条件,栈空间有限 |
| 作用域 | 局部变量、全局变量 | static int count;
| static
延长生命周期,限制作用域 |
4. 数组与字符串
类型 | 声明方式 | 操作 | 注意事项 |
---|---|---|---|
一维数组 | int arr[5]; | 索引访问:arr[0]=10; | 下标从0开始,内存连续 |
多维数组 | int matrix[3][3]; | 嵌套循环遍历 | 行优先存储 |
字符数组 | char str[20]; | strcpy(s1,s2); strlen(s); | 以'\0' 结尾 |
字符串函数 | <string.h> 库 |
strcat(s1,s2); // 拼接
strcmp(s1,s2); // 比较
| 注意缓冲区溢出风险 |
5. 指针(核心重点)
概念 | 语法 | 示例 | 应用场景 |
---|---|---|---|
基本指针 | 变量地址操作 |
int *p = &a;
*p = 20; // 修改a的值
| 间接访问变量 |
| 指针运算 | 算术运算、关系运算 | p++; p1-p2;
| 数组遍历、内存操作 |
| 数组指针 | 指针与数组关系 |
int arr[5];
int *p = arr; // p等价&arr[0]
| 数组名是常量指针 |
| 函数指针 | 指向函数的指针 |
int (*funcPtr)(int);
funcPtr = &add;
| 回调函数、策略模式 |
| 多级指针 | 指针的指针 | int **pp = &p;
| 动态二维数组 |
6. 内存管理
操作 | 函数 | 示例 | 注意事项 |
---|---|---|---|
静态分配 | 编译时分配 | int arr[100]; | 栈空间有限(通常1-8MB) |
动态分配 | malloc/calloc |
int *p = (int*)malloc(10*sizeof(int));
| 堆空间较大,需手动释放 |
| 内存释放 | free()
| free(p); p=NULL;
| 避免野指针 |
| 内存操作 | memset/memcpy
|
memset(p, 0, 100); // 内存置0
memcpy(dest, src, size);
| 底层内存操作 |
7. 结构体与联合体
类型 | 定义方式 | 特点 | 应用场景 |
---|---|---|---|
结构体 |
struct Student {char name[20];int age;
};
| 不同数据类型的集合 | 数据封装 |
| 结构体指针 |
struct Student *s;
s->age = 20;
| 箭头运算符访问 | 动态结构体 |
| 联合体 |
union Data {int i;float f;
};
| 共享内存空间 | 节省内存、类型转换 |
| 枚举 |
enum Color {RED, GREEN=5, BLUE};
| 命名常量集合 | 状态机、选项设置 |
8. 文件操作
操作 | 函数 | 模式 | 示例 |
---|---|---|---|
打开文件 | fopen() | "r" 读 "w" 写 "a" 追加 | FILE *fp = fopen("data.txt","r"); |
读写数据 | fprintf/fscanf | 格式化I/O |
fprintf(fp, "%d", num);
fscanf(fp, "%d", &num);
| 字符I/O | fgetc/fputc
| 单个字符 | ch = fgetc(fp);
|
| 行I/O | fgets/fputs
| 字符串 | fgets(buf, 100, fp);
|
| 关闭文件 | fclose()
| 释放资源 | fclose(fp);
|
9. 预处理器
指令 | 功能 | 示例 | 应用场景 |
---|---|---|---|
宏定义 | #define | #define PI 3.14159 | 常量定义、代码简化 |
条件编译 | #ifdef/#endif |
#ifdef DEBUGprintf("Debug info");
#endif
10. 高级特性
特性 | 说明 | 示例 | 应用 |
---|---|---|---|
位字段 | 紧凑存储布尔值 |
struct {unsigned int isReady:1;unsigned int hasData:1;
} status;
| 硬件寄存器操作 |
| 可变参数 | 不定参数函数 |
#include <stdarg.h>
void func(int n, ...) {va_list args;va_start(args, n);int val = va_arg(args, int);
}
| printf()
实现原理 |
| 内联函数 | inline
关键字 | inline int max(int a, int b);
| 减少函数调用开销 |
| 类型限定符 | const
volatile
| volatile int *reg;
| 硬件编程、编译器优化控制 |
内存布局图解
+------------------+
| 代码区 | 程序指令(只读)
+------------------+
| 静态数据区 | 全局/静态变量
+------------------+
| ↓ 堆 | 动态分配(malloc等)
| ↑ |
+------------------+
| ↓ 栈 | 局部变量、函数调用
| ↑ |
+------------------+
| 命令行参数 | argc/argv
+------------------+