电子设计大赛【C语言核心知识点】讲解

目录

前言

[1. 基础语法](#1. 基础语法)

[2. 流程控制](#2. 流程控制)

[3. 函数](#3. 函数)

[4. 数组与字符串](#4. 数组与字符串)

[5. 指针(核心重点)](#5. 指针(核心重点))

[6. 内存管理](#6. 内存管理)

[7. 结构体与联合体](#7. 结构体与联合体)

[8. 文件操作](#8. 文件操作)

[9. 预处理器](#9. 预处理器)

[10. 高级特性](#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-else switch-case
cpp 复制代码
if(score>90) grade='A';
else if(score>60) grade='B';

| 多分支判断 |

| 循环结构 | for while do-while |

cpp 复制代码
for(int i=0; i<10; i++){
    sum += i;
}

| 重复操作 |

| 跳转语句 | break continue goto |

cpp 复制代码
while(1){
    if(error) break;
}

| 中断循环/函数返回 |


3. 函数

模块 内容 示例 要点
函数定义 返回值类型、参数列表
cpp 复制代码
int add(int a, int b) {
    return a+b;
}

| 需先声明后使用 |

| 参数传递 | 值传递、地址传递 |

cpp 复制代码
void swap(int *x, int *y) {
    int t=*x; *x=*y; *y=t;
}

| 地址传递可修改实参 |

| 递归函数 | 函数调用自身 |

cpp 复制代码
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>
cpp 复制代码
strcat(s1,s2); // 拼接
strcmp(s1,s2); // 比较

| 注意缓冲区溢出风险 |


5. 指针(核心重点)

概念 语法 示例 应用场景
基本指针 变量地址操作
cpp 复制代码
int *p = &a;
*p = 20; // 修改a的值

| 间接访问变量 |

| 指针运算 | 算术运算、关系运算 | p++; p1-p2; | 数组遍历、内存操作 |

| 数组指针 | 指针与数组关系 |

cpp 复制代码
int arr[5];
int *p = arr; // p等价&arr[0]

| 数组名是常量指针 |

| 函数指针 | 指向函数的指针 |

cpp 复制代码
int (*funcPtr)(int);
funcPtr = &add;

| 回调函数、策略模式 |

| 多级指针 | 指针的指针 | int **pp = &p; | 动态二维数组 |


6. 内存管理

操作 函数 示例 注意事项
静态分配 编译时分配 int arr[100]; 栈空间有限(通常1-8MB)
动态分配 malloc/calloc
cpp 复制代码
int *p = (int*)malloc(10*sizeof(int));

| 堆空间较大,需手动释放 |

| 内存释放 | free() | free(p); p=NULL; | 避免野指针 |

| 内存操作 | memset/memcpy |

cpp 复制代码
memset(p, 0, 100); // 内存置0
memcpy(dest, src, size);

| 底层内存操作 |


7. 结构体与联合体

类型 定义方式 特点 应用场景
结构体
cpp 复制代码
struct Student {
    char name[20];
    int age;
};

| 不同数据类型的集合 | 数据封装 |

| 结构体指针 |

cpp 复制代码
struct Student *s;
s->age = 20;

| 箭头运算符访问 | 动态结构体 |

| 联合体 |

cpp 复制代码
union Data {
    int i;
    float f;
};

| 共享内存空间 | 节省内存、类型转换 |

| 枚举 |

cpp 复制代码
enum Color {RED, GREEN=5, BLUE};

| 命名常量集合 | 状态机、选项设置 |


8. 文件操作

操作 函数 模式 示例
打开文件 fopen() "r""w""a"追加 FILE *fp = fopen("data.txt","r");
读写数据 fprintf/fscanf 格式化I/O
cpp 复制代码
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
cpp 复制代码
#ifdef DEBUG
    printf("Debug info");
#endif

10. 高级特性

特性 说明 示例 应用
位字段 紧凑存储布尔值
cpp 复制代码
struct {
    unsigned int isReady:1;
    unsigned int hasData:1;
} status;

| 硬件寄存器操作 |

| 可变参数 | 不定参数函数 |

cpp 复制代码
#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
+------------------+


相关推荐
qq_4017004112 小时前
嵌入式用Unix时间的优势及其C语言转换
服务器·c语言·unix
智者知已应修善业18 小时前
【51单片机普通延时奇偶灯切换】2023-4-4
c语言·经验分享·笔记·嵌入式硬件·51单片机
晚风(●•σ )18 小时前
C++语言程序设计——11 C语言风格输入/输出函数
c语言·开发语言·c++
X***489619 小时前
C源代码生成器
c语言·开发语言
合作小小程序员小小店21 小时前
桌面安全开发,桌面二进制%恶意行为拦截查杀%系统安全开发3.0,基于c/c++语言,mfc,win32,ring3,dll,hook,inject,无数据库
c语言·开发语言·c++·安全·系统安全
oioihoii1 天前
C++语言演进之路:从“C with Classes”到现代编程基石
java·c语言·c++
历程里程碑1 天前
各种排序法大全
c语言·数据结构·笔记·算法·排序算法
树在风中摇曳1 天前
带哨兵位的双向循环链表详解(含 C 代码)+ LeetCode138 深度解析 + 顺序表 vs 链表缓存机制对比(图解 CPU 层级)
c语言·链表·缓存
雨落在了我的手上1 天前
C语言入门(二十一):字符函数和字符串函数(1)
c语言
embrace991 天前
【C语言学习】结构体详解
android·c语言·开发语言·数据结构·学习·算法·青少年编程