电子设计大赛【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 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
+------------------+


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90133.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Numpy 库 矩阵数学运算,点积,文件读取和保存等

目录 1.数组&#xff08;矩阵&#xff09;的组合 2.数组&#xff08;矩阵&#xff09;的切割 3.数组的数学运算 4.数组的深拷贝和浅拷贝 5.随机模块 6.矩阵统计运算 7.矩阵的特有运算点积&#xff0c;求逆 8.文件读取和保存 1.数组&#xff08;矩阵&#xff09;的组合 水…

STL学习(?函数对象,谓词,内建函数对象)

目录 一、函数对象 1.函数对象的概念 2.函数对象的使用 &#xff08;1&#xff09;函数对象在使用的时候&#xff0c;可以像普通函数那样调用&#xff0c;可以有参数&#xff0c;也可以有返回值。 &#xff08;2&#xff09;函数对象超出普通函数的概念&#xff0c;函数对象…

【爬虫】05 - 爬虫攻防

爬虫05 - 爬虫攻防 文章目录爬虫05 - 爬虫攻防一&#xff1a;随机User-Agent爬虫1&#xff1a;fake-useragent2&#xff1a;高级反反爬策略3&#xff1a;生产环境建议二&#xff1a;代理IP爬虫1&#xff1a;获取代理IP2&#xff1a;高阶攻防3&#xff1a;企业级的代理实战三&am…

FPGA自学——存储器模型

FPGA自学——存储器模型 文章目录FPGA自学——存储器模型一、IP核二、ROM&#xff08;read only memory&#xff09;三、ROM的IP核调用四、RAM&#xff08;random access memory&#xff09;五、RAM的IP核调用总结1.不同波形的使用的存储器2.块与分布式的选择3.FPGA与模块的容量…

【C++】stack和queue拓展学习

目录 1.反向迭代器思路及实现 1.1. 源码及框架分析 1.2. 实现反向迭代器 2.stack和queue练习拓展-计算器实现 2.1. 后缀表达式概念 2.2. 后缀表达式运算规则 2.3. 中缀表达式转后缀表达式 2.3.1 转换思路 2.3.2 代码实现 2.4. 计算器实现 1.反向迭代器思路及实现 1.1…

Web3与区块链如何革新网络安全——走在前沿

随着互联网技术的飞速发展&#xff0c;网络安全问题日益成为全球关注的焦点。Web3和区块链技术作为新兴的技术力量&#xff0c;正在逐步改变网络安全的格局。本文将探讨Web3和区块链技术如何革新网络安全&#xff0c;走在技术前沿。 1. Web3技术概述 Web3&#xff0c;即第三代互…

网络初级安全第三次作业

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户登录</title><style>* {margin:…

CSS中用display实现元素的显示/隐藏切换

** 通过display中的none和block ** 在前端开发中&#xff0c;display: none 和 display: block 是两种常用的 CSS 显示模式&#xff0c;核心区别在于&#xff1a;是否在页面中保留元素的占位空间 1. 核心区别属性display: nonedisplay: block占位空间元素完全从渲染树中移除&am…

因果图方法设计测试用例的价值与使用范围

一、因果图方法的核心原理 因果图方法通过分析软件规格说明中的输入条件&#xff08;因&#xff09;和输出结果&#xff08;果&#xff09;之间的逻辑关系&#xff0c;利用图形化方式将这些关系清晰展现。它使用特定的符号表示因果关系&#xff08;如恒等、非、或、与&#xff…

智慧农服数字化平台-数字科技赋能农业,开启智慧三农新篇章

智慧农服数字化平台数字科技赋能农业&#xff0c;开启智慧三农新篇章平台概览在乡村振兴和农业现代化的时代背景下&#xff0c;我们推出了创新的农业服务数字化平台——一个专为农业生产者打造的综合性SaaS服务平台。平台以"科技助农、数据兴农"为使命&#xff0c;通…

在线教育培训课程视频如何防下载、防盗录?

在数字化学习日益普及的今天&#xff0c;高质量的在线课程已成为教育机构、知识付费平台和讲师的核心竞争力。如何在不影响学员正常学习体验的前提下&#xff0c;有效防止课程视频被恶意盗取&#xff1f;今天介绍在线教育课程防下载、防盗录的10种视频加密方法&#xff0c;看看…

图像分析学习笔记(2):图像处理基础

图像分析学习笔记&#xff1a;图像处理基础图像增强方法图像复原方法图像分割方法形态学处理图像增强方法 目的&#xff1a;改善视觉效果&#xff0c;例如增强对比度定义&#xff1a;为了改善视觉效果、便于人或计算机对图像的分析理解&#xff0c;针对图像的特点或存在的问题…

生存分析机器学习问题

研究目标&#xff1a; 开发一个机器学习模型&#xff0c;用于个性化预测XXX的总体生存期。 模型输入&#xff1a;结合生存时间、治疗方案、人口统计学特征和实验室测试结果等多种特征。 模型输出&#xff1a;预测二元结果&#xff08;活着 vs. 死亡&#xff09;。 应用场景&…

【华为机试】547. 省份数量

文章目录547. 省份数量描述示例 1示例 2提示解题思路核心分析问题转化算法选择策略1. 深度优先搜索 (DFS)2. 广度优先搜索 (BFS)3. 并查集 (Union-Find)算法实现详解方法一&#xff1a;深度优先搜索 (DFS)方法二&#xff1a;广度优先搜索 (BFS)方法三&#xff1a;并查集 (Union…

09_Spring Boot 整合 Freemarker 模板引擎的坑

09_Spring Boot 整合 Freemarker 模板引擎的坑 1.背景&#xff1a; springboot 版本&#xff1a;3.0.2 2. 引入依赖 在 pom.xml 中添加&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web<…

十七、【Linux系统yum仓库管理】替换阿里源、搭建本地yum源

替换阿里源、搭建本地yum源本章学习目标内容简介阿里外网源核心功能本地yum核心功能操作演示替换阿里外网源备份原有yum源清理冲突配置下载阿里源配置文件添加EPEL扩展源清理缓存重建索引验证源状态测试安装软件使用镜像搭建本地仓库准备ISO镜像创建挂载点目录挂载iso文件验证挂…

家庭网络怎么进行公网IP获取,及内网端口映射外网访问配置,附无公网IP提供互联网连接方案

在家庭网络中&#xff0c;我们常常需要通过公网IP来访问内网中的设备&#xff0c;比如家庭NAS、Web服务器或监控摄像头。要实现这个目标&#xff0c;首先要确保你的网络具有一个可用的公网IP&#xff0c;然后通过路由器配置端口映射&#xff08;Port Forwarding&#xff09;。如…

(LeetCode 面试经典 150 题 ) 128. 最长连续序列 (哈希表)

题目&#xff1a;128. 最长连续序列 思路&#xff1a;哈希表&#xff0c;时间复杂度0(n)。 用集合set来实现哈希表的功能&#xff0c;记录所有出现的元素。然后遍历元素&#xff0c;细节看注释。 C版本&#xff1a; class Solution { public:int longestConsecutive(vector&…

Altera Quartus:BAT批处理实现一键sof文件转换为jic文件

sof文件是Quartus编译默认生成的程序文件&#xff0c;用于通过JTAG口下载到FPGA内部RAM&#xff0c;断电程序会丢失&#xff0c;jic文件是用于固化到外部Flash中的程序文件&#xff0c;断电程序不会丢失。本文介绍如何通过批处理文件实现sof到jic的一键自动化转换。 Quartus工程…

基于单片机婴儿床/婴儿摇篮/婴儿车设计/婴儿监护系统

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 本设计实现了一种基于单片机的多功能智能婴儿监护系统&#xff0c;集成于婴儿床、摇篮或婴儿车中…