C语言基础知识-学习笔记
1.IDE开发工具1.1.常用开发工具很多本次学习用的是Visual Studio官网直接下载免费使用下载安装方便。2.C语言概述2.1.概述通俗来说就是一种机器语言人与机器交互的工具。C语言通过编译生成机器可以读懂的语言通过执行相应的命令从而实现我们想要的功能。2.2.C语言程序结构程序是由一个或者多个函数组成必须以main() 函数为入口执行向对应的代码指令。程序开头可以引入C语言自带的包或者开发者自己编写好的包引入后可以直接调用包里的方法。函数包含声明函数名称、返回类型、参数形式和函数体执行内容2.3计算机基础1.位、字节、字长的定义1位 1bit 1kb1024bit 2的10次方 10241字节 8bit。cpu一次并行处理的位数字长。比如64位计算机就是一次可以并行处理16位2.西文编码从ASCII码到字符显示ASCII码就是用二进制编码表示字符(7位或者8位)实现了字符以二进制形式存在到计算机内存中。字符编码解决了字符的存储问题但是没有解决字符的显示问题需要有字符的字型数据。字形数据点阵数据8*8点阵、矢量数据笔画3.汉字字符编码西文字符用一个字节进行编码。国标码GB23120-80 1980年颁发 (4位16进制数表示) 6千多汉字字形码点阵数据16*16点阵、矢量数据笔画现在计算都是用GBK编码对GB23120-80进行了补充2001年颁布了GB18030 可收录2.6万个汉字。4.计算机的硬件系统组成输入设备键盘、鼠标 等处理设备/单片机(存储器、运算器、控制器)显示设备显示器、打印机、投影仪等存储器内存储器ROM只读存储器 RAM随机存储器、外存储器RAMSRAM高速缓存、 DRAM内存条外存储器硬盘、U盘、光盘、软盘显卡数据信号转换成模拟信号。3.C语言-数据和C3.1.示例程序#include stdio.h //引入包 //主函数 返回int类型 参数类型 为空 void butler(void); void getyour_val(void); int main(void) { int num; //定义变量 参数类型 变量名称 num 1; //变量赋值 printf(调用了stdio包里的打印函数 %d \n , num); //打印函数 %d 为占位符用后面参数代替 getyour_val(); return 0; //函数返回值 } void getyour_val() { float weigth; float val_n; printf(请按kg为单位输入您的体重 \n); scanf_s(%f, weigth); //接收输入参数 val_n weigth * 980.4*1000; printf(与你体重相同黄金价格是%f 元\n, val_n); }执行效果3.2.变量与常量程序要完成各项任务就需要使用数据即承载信息的数字和字符。常量有些数据类型使用之前就设定好了整个程序执行过程中没有变化。变量有些数据类型在程序执行期间可能会被赋值或者改变这些称为变量。3.3.数据类型和关键字关键字说明典型占用基本数据类型int整型通常 4 字节char字符型本质是小整数1 字节float单精度浮点型4 字节double双精度浮点型8 字节类型修饰符不单独使用short短整型如 short intlong长整型如 long int、long doublesigned有符号默认即是有符号unsigned无符号只表示非负数常见组合示例unsigned int、long long、unsigned char。构造类型派生类型struct结构体成员内存连续分配union联合体/共用体成员共享同一段内存enum枚举类型定义命名的整数常量集合类型定义与特殊类型typedef为已有类型起别名如 typedef unsigned int uint;void空类型用于无返回值函数、无参数列表、void* 通用指针C99 / C11 标准新增的类型_BoolC99布尔类型需包含 stdbool.h 后可用 bool_ComplexC99复数类型_ImaginaryC99虚数类型_AtomicC11原子类型用于并发编程3.3.1 位、字节、字位最小存储单位0/1字节1个字节为8位 256种情况字:设计计算机给定的自然存储单位。8位计算机一次可以处理8个位的数据也叫8字计算机。64位计算机一次可以处理64个位的数据也叫64字计算机。3.3.2整数和浮点数整数直接按二进制存储浮点数转成科学计数法以二进制的形式分开存在符号位、小数位和指数位ps浮点数因为存储方式的原因在运算过程中可能会损失部分精度。3.4.基本数据类型【代码示例】#include stdio.h #include stdint.h int main(void) { // 标准类型大小32位MCU上 printf(char: %lu 字节\n, sizeof(char)); // 1 printf(short: %lu 字节\n, sizeof(short)); // 2 printf(int: %lu 字节\n, sizeof(int)); // 4 printf(long: %lu 字节\n, sizeof(long)); // 4 printf(long long: %lu 字节\n, sizeof(long long));// 8 printf(float: %lu 字节\n, sizeof(float)); // 4 printf(double: %lu 字节\n, sizeof(double)); // 8 // 嵌入式首选固定宽度类型stdint.h int8_t a -128; // 精确 8位 有符号 uint8_t b 0xFF; // 精确 8位 无符号 int16_t c 1000; // 精确 16位 uint32_t d 0xDEADBEEF;// 精确 32位 return 0; }【代码讲解】嵌入式开发中int 在不同平台可能不同8位单片机是16位32位MCU是32位。使用 stdint.h 中的固定宽度类型int8_t/uint16_t等可以消除移植隐患。sizeof 是编译期运算符返回类型或变量的字节数。常用来计算数组长度、结构体大小等。char 在任何平台都是 1 字节是 C 语言最小的寻址单位。3.5.有符号和无符号混用陷阱#include stdio.h #include stdint.h int main(void) { int32_t a -1; uint32_t b 2; // 危险有符号会被隐式转换为无符号 if (a b) { printf(-1 2\n); } else { printf(-1 2 (无符号比较结果)\n); } // 输出-1 2 (无符号比较结果) // 因为 -1 转为 uint32_t 变成 0xFFFFFFFF // 正确写法统一类型 if (a (int32_t)b) { printf(正确-1 2\n); } return 0; }【代码讲解】当 有符号 和 无符号 类型在同一个表达式中比较或运算时有符号数会被隐式转换为无符号数。-1 转为 uint32_t 后变成 0xFFFFFFFF4294967295远大于 2导致逻辑错误。这是嵌入式开发中极常见的 bug 来源尤其在数组索引、循环条件中。因此尽量用相同类型进行比较或者无符号转成有符号进行比较3.5.1.for循环的简单使用#include stdio.h #include stdint.h int main(void) { int i 10; //uint8_t i 10; for ( i ; i 0; i--) { printf(输出数据i:%d \n, i); } return 0; }正常通过for循环依次输出 109......0如果i设置成uint8_t类型再循环到0之后 会把-1被隐式转换为无符号数下溢变成255永远都是0,程序会进入死循环。3.6.整数溢出与环绕int main(void) { uint8_t i 255; i i1; printf(输出上溢数据uint8_t 2551:%d \n, i); //输出为 0 uint8_t ix 0; ix ix - 1; //没有下溢因为-1不能赋值给无符号变量 printf(输出下溢数据uint8_t 0-1:%d \n, ix); //输出为 255 int8_t i2 127; i2 i2 1; printf(输出上溢数据int8_t 1271:%d \n, i2); //输出为 -128 int8_t i3 -128; i3 i3 - 1; printf(输出下溢数据int8_t -128-1:%d \n, i3); //输出为 127 // 嵌入式中的实际应用计数器环绕 uint32_t timer 0xFFFFFFFF; timer; // 变成 0定时器常用此特性 printf(输出上溢数据uint32_t timer :%d \n, timer); //输出为 0 return 0; }4.指针与地址操作指针Pointer​ 本质上是一个变量但它存储的不是普通数据而是另一个变量的内存地址。指针是 C 语言的灵魂也是嵌入式开发的核心。寄存器访问、DMA 配置、内存映射、回调函数都离不开指针。4.1.指针基础与取地址int main(void) { uint32_t var 120; uint32_t *p var; // p 指向 var 的地址 printf(var 的值: %d\n, var); printf(var 的地址: %p\n, (void*)var); printf(p 指向的值: %d\n, *p); *p 12; // 通过指针修改值 printf(修改后 var: %d\n, var); // 指针运算 uint16_t arr[4] { 0, 1, 2, 3 }; uint16_t *q arr; q; // 指针存数组指向的是arr[0]地址p后 就指向 arr[1] printf(arr[1] %d\n, *q); printf(arr[1]地址 %p\n, *q); return 0; }1.指针定义 类型 *指针名 例 uint16_t *q2.指针赋值 *指针名 内容(常量、地址、变量、数组 等)例*p12*p var*p var3.获取指针*指针名 或者 指针名例*p指针存的内容或p内容存的地址4.2.指针与数组的关系数组名 buf 在表达式中会退化为指向首元素的指针数组赋值给指针后(p buf; // 不用 buf 本身就是地址),两者可以看成是同一个数组指针。我们可以获取数组内容也可以或者到每个数组成员的地址。#include stdio.h #include stdint.h #include stdlib.h int main(void) { uint16_t buf[11] { 0,1,2,3,4,5,6,7,8,9,10}; // 数组名在大多数语境下退化为指针 uint16_t *p; p buf; // 不用 buf 本身就是地址 printf(sizeof(buf) %zu \n, sizeof(buf)); //22 数组所有元素的字节 printf(sizeof(p) %zu \n, sizeof(p)); //8 指针字节 64位系统 uint16_t指针 8字节32位系统则是4 printf(sizeof(p) %zu \n, sizeof(p[0])); //2 元素字节 int n sizeof(buf) / sizeof(buf[0]); printf(arr_len(buf) %d \n, n); // 11 元素个数 // 以下三种方式完全等价 printf(%d\n, buf[3]); // 下标访问 printf(%d\n, *(buf 3)); // 指针偏移解引用 printf(%d\n, 3[buf]); // 等价写法少用 p[5] 99; // 通过指针下标赋值 printf(buf[7] %d\n, buf[7]); printf(通过指针下标赋值后的结果 buf[5] %d\n, buf[5]); //获取地址 printf(p %p\n, p); printf(p[0] %p\n, p[0]); printf(buf %p\n, buf); printf(buf[0] %p\n, buf[0]); return 0; }5.结构体与联合体6.位操作与位域7.内存管理8.函数与函数指针9.预处理与宏10.volatile 与 const11.中断与回调函数12.寄存器映射与硬件访问13.编译与链接14.常见嵌入式陷阱与最佳实践

相关新闻

从零构建企业级入侵检测系统:基于Suricata与ELK的实战指南

从零构建企业级入侵检测系统:基于Suricata与ELK的实战指南

1. 项目概述:从“防盗门”到“智能哨兵”几年前,我还在为一个大型数据中心的安全运维头疼。机房里的服务器日夜不停地运转,承载着海量的业务数据。传统的防火墙和杀毒软件就像大楼的锁和门禁,能挡住一些明显的“破门而入”&#x…

2026/8/21 3:07:37 阅读更多 →
远程PCIe连接技术:破解汽车高性能计算成本困局

远程PCIe连接技术:破解汽车高性能计算成本困局

1. 项目背景:当高性能计算遇上车辆成本困局最近和几个做智能驾驶和座舱域控制器的朋友聊天,大家普遍都在头疼同一个问题:车规级高性能计算平台的成本。一颗高算力的车规级SoC,比如那些能跑Transformer大模型或者处理多路8K摄像头数…

2026/8/21 3:38:51 阅读更多 →
TVA-World生成式具身智能:概念、原理、应用(12)

TVA-World生成式具身智能:概念、原理、应用(12)

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

2026/8/21 4:23:46 阅读更多 →

最新新闻

从幻想到现实:扫地机器人、视频通话与AI脑机接口的技术演进与实现

从幻想到现实:扫地机器人、视频通话与AI脑机接口的技术演进与实现

大家好,我是专注于技术分享的博主。今天我们来聊聊一个非常有趣的话题:技术发展中的“概念映射”与“功能实现”。你是否发现,很多科幻作品或童年幻想中的神奇物品,随着科技的进步,正以不同的形态走进现实?…

2026/8/21 7:22:43 阅读更多 →
1.3 基于MQTT协议接入OneNET物联网平台的基础配置指南

1.3 基于MQTT协议接入OneNET物联网平台的基础配置指南

1. 注册与创建云端产品实例要实现底层硬件(如下位机MCU)与云端的数据交互,第一步需要在OneNET平台建立对应的“云端映射”,即完成产品的创建与基础架构的配置。1.1 平台接入与开发者准备在中国移动OneNET开放平台完成账号注册。由…

2026/8/21 7:22:43 阅读更多 →
向量库选择

向量库选择

1.欧式距离2.余弦相似度探索向量索引1.递归文档分块2.智能语义分块rags评估

2026/8/21 7:22:43 阅读更多 →
Node.js服务端Excel生成:基于SpreadJS实现复杂报表导出

Node.js服务端Excel生成:基于SpreadJS实现复杂报表导出

1. 项目概述:为什么要在服务端生成Excel?在Web应用开发中,导出Excel报表是一个高频且刚性的需求。无论是后台管理系统的数据统计、电商平台的订单明细,还是企业内部的数据分析,用户都期望能将网页上的数据一键导出为结…

2026/8/21 7:22:43 阅读更多 →
C++Sort怎么实现的:分治,快排,插排,堆排

C++Sort怎么实现的:分治,快排,插排,堆排

CSort机制:快排,插排,堆排 快速排序回顾 总思想:随便取一个元素为枢轴,通过一系列操作, 将枢轴左边元素小于枢轴,右边大于枢轴 然后递归处理左右 一般取开头,结尾,中间…

2026/8/21 7:22:43 阅读更多 →
GM(1,1)灰色预测模型:原理、Python实现与实战避坑指南

GM(1,1)灰色预测模型:原理、Python实现与实战避坑指南

1. 项目概述:从“灰色”中预见未来在数据分析与预测的领域里,我们常常面临一个尴尬的局面:手头的数据太少,传统的时间序列预测模型(如ARIMA)要求样本量大、数据规律性强,而现实中的很多场景&…

2026/8/21 7:21:43 阅读更多 →

日新闻

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

前言随着国家数字基础设施信创替代、关键技术自主可控战略持续深化,口岸智慧安防、边检智能管控领域正全面进入国产化、自主化、安全可控升级周期。当前国内机场边检旅客识别与定位体系长期依赖国外商用视觉算法、进口成像硬件、闭源通用计算平台,存在核…

2026/8/21 0:00:42 阅读更多 →
别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱当下数字化建设浪潮中,很多项目将三维可视化、视频贴图叠加的数字孪生等同于空间智能。传统数字孪生更多停留在三维场景复刻,擅长把物理世界“画出来、展示出来”,…

2026/8/21 0:00:42 阅读更多 →
105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40C到85C的影像质量一致性——ISP参数温漂补偿与产线标定策略 去年冬天在北方某车厂做A样评审,凌晨四点的黑河试验场,零下三十三度。客户拿了一台冷启动的车,中控屏上倒车影像全是雪花噪点,暗部细节直接糊成一片。我第一反应是sensor温度没上来,暗电流…

2026/8/21 0:00:42 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/20 6:11:08 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/21 0:14:22 阅读更多 →