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

 目录

前言

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-else switch-case

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 DEBUG
    printf("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
+------------------+


下载前可以先看下教程 https://pan.quark.cn/s/16a53f4bd595 小天才电话手表刷机教程 — 基础篇 我们将为您简单的介绍小天才电话手表新机型的简单刷机以及玩法,如adb工具的使用,magisk的刷入等等。 我们会确保您看完此教程后能够对Android系统有一个最基本的认识,以及能够成功通过magisk root您的手表,并安装您需要的第三方软件。 ADB Android Debug Bridge,简称,在android developer的adb文档中是这么描述它的: 是一种多功能命令行工具,可让您与设备进行通信。 该命令有助于各种设备操作,例如安装和调试应用程序。 提供对 Unix shell 的访问,您可以使用它在设备上运行各种命令。 它是一个客户端-服务器程序。 这听起来有些难以理解,因为您也没有必要去理解它,如果您对本文中的任何关键名词产生疑惑或兴趣,您都可以在搜索引擎中去搜索它,当然,我们会对其进行简单的解释:是一款在命令行中运行的,用于对Android设备进行调试的工具,并拥有比一般用户以及程序更高的权限,所以,我们可以使用它对Android设备进行最基本的调试操作。 而在小天才电话手表上启用它,您只需要这么做: - 打开拨号盘; - 输入; - 点按打开adb调试选项。 其次是电脑上的Android SDK Platform-Tools的安装,此工具是 Android SDK 的组件。 它包括与 Android 平台交互的工具,主要由和构成,如果您接触过Android开发,必然会使用到它,因为它包含在Android Studio等IDE中,当然,您可以独立下载,在下方选择对应的版本即可: - Download SDK Platform...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花开月满西楼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值