?目錄
前言
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
+------------------+