嵌入式基础day07学习笔记
指针的运算指针运算指针运算是以指针所存放的地址作为运算量而进行的指针运算的实质就是地址的计算指针的算数运算指针加上整数指针减去整数, 指针递增指针递减和两个指针相减。​ 指针加减一个n的运算: px n px - n​ 移动步长是指针的目标注意不同数据类型的两个指针实行加减整数运算是无意义的pxn表示的实际位置的地址量是(px) sizeof(px的类型) * npx-n表示的实际位置的地址量是 (px) - sizeof(px的类型) * n两指针相减运算px-py 运算的结果是两指针指向的地址位置之间相隔数据的个数两指针相减的结果值不是地址量而是一个整数值表示两指针之间相隔数据的个数。指针的算数运算应用大小端模式-电脑存储模式大小端指的是在存储器中存放数据的字节顺序小端模式是指数据的低字节保存在内存的低地址中大端模式是指数据的低字节保存在内存的高地址中写一段代码判断机器是大端模式还是小端模式#includestdio.h int main() { unsigned int a 0x12345678; char *p (char*)a; printf(%#x\n, a); printf(%#x\n, *p); p; printf(%#x\n, *p); p; printf(%#x\n, *p); p; printf(%#x\n, *p); return 0; ​ } ​指针的关系运算两指针之间的关系运算表示它们指向的地址位置之间的关系。指向地址大的指针大于指向地址小的指针。但可以和零进行等于或不等于的关系运算判断指针是否为空。指针与数组的基本用法指针与数组数组指针是指数组在内存中的起始地址数组元素的地址是指数组元素在内存中的起始地址。一维数组的数组名为一维数组的指针起始地址例如double x[8];这中间x为数组的起始地址案例1:#includestdio.h int main() { int a[] {1,3,5,7,9}; int i; printf(%p\n,a); printf(%ld\n,sizeof(a)); for(i 0;i sizeof(a)/sizeof(int); i) { //printf(%p ,a[i]); printf(%p ,ai); } for(i 0;i sizeof(a)/sizeof(int); i) { printf(%d %d\n,*(ai), a[i]); } ​ putchar(\n); ​ return 0; }设指针变量px的地址值等于数组的指针x即指针变量px指向数组的首元数则x[i] 、* (pxi)、* (xi) 和px[i]具有完全相同的功能访问数组第i1个数组元素。案例 2#includestdio.h int main() { int a[] {1,3,5,7,9}; int *p a; int i; for(i 0;i sizeof(a)/ sizeof(int); i) { printf(%d %d %d %d\n,*(a i), a[i], *(p i), p[i]); } ​ putchar(\n); ​ return 0; }指针与数组使用注意事项指针变量和数组在访问数组中元素时一定条件下其使用方法具有相同的形式因为指针变量和数组名都是地址量数组名和指针有什么区别含义不同数组名代表一个数组存放相同类型的元素指针代表存储地址的变量使用不同数组名是地址常量不能修改指针是变量可以存储其它值也可自增c长度不同sizeof数组名代表数组占用的总空间sizeof指针和操作系统有关32位系统4个字节本质不同指针变量是地址变量而数组名是地址常量案例#includestdio.h int main() { int a[] {1,3,5,7,9}; int *p a; printf(before: %d %p\n,*p, p); p a[2];//p a 2; printf(after:%d %p\n, *p, p); ​ printf(sizeof(a)%ld\n,sizeof(a)); printf(sizeof(p)%ld\n,sizeof(p)); ​ printf(%d %d %d %d\n, p[1], *(p 1), a[1], *( a 1)); printf(%d %d\n,p[-1], *(p - 1)); return 0; }指针与数组相关笔试题int a[ ]{1,2,3,4,5,6,7,8,9,10},*p a, i1; 数组元素地址的正确表示是DA(a1) Ba Cp Dp[i]数组名是地址常量p,p-- (对)a,a-- (错)a1,*(a2) (对)判断下面sizeof的值int a[] { 1, 2, 3, 4 };printf(%ld\n, sizeof(a));printf(%ld\n, sizeof(*a));printf(%ld\n, sizeof(a 1))printf(%ld\n, sizeof(a[1]));printf(%ld\n, sizeof(a[0]));printf(%ld\n, sizeof(a[0] 1));答案1648488代码案例#includestdio.h int main() { int a[] {1, 2, 3, 4}; ​ printf(sizeof(a)%ld\n,sizeof(a)); printf(sizeof(*a)%ld\n,sizeof(*a)); printf(sizeof(a1)%ld\n,sizeof(a 1)); printf(sizeof(a[1])%ld\n,sizeof(a[1])); printf(sizeof(a[0])%ld\n,sizeof(a[0])); printf(sizeof(a[0]1)%ld\n,sizeof(a[0] 1)); ​ return 0;一级指针与二维数组二维数组的元素连续存储按行优先存案例编程实现使用一级指针遍历二维数组正常遍历二维数组#includestdio.h int main() { int a[3][4] {{1, 2, 3, 4},{4, 5, 6, 8},{2, 9, 3, 5}}; int i, j; int n sizeof(a)/ sizeof(a[0]); int m sizeof(a[0])/ sizeof(int); ​ for(i 0; i n; i){ for(j 0; j m; j){ printf(%d, a[i][j]); } putchar(\n); } ​ return 0; }一级指针遍历二维数组#includestdio.h int main() { int a[3][4] {{1, 2, 3, 4},{4, 5, 6, 8},{2, 9, 3, 5}}; int i; int n sizeof(a)/ sizeof(a[0]); int m sizeof(a[0])/ sizeof(int); int *p; ​ p a[0][0]; for(i 0;i n * m; i){ printf(%d %d\n,*(p i), p[i]); } return 0; }数组指针与二维数组把二维数组看作由多个一维数组构成。int a 3][3]含有三个元素a[0]、a[1]、a[2]元素a[0]、a[1]、a[2]都是一维数组名二维数组名代表数组的起始地址数组名加1是移动一行元素。二维数组名常被称为行地址行指针数组指针存储行地址的指针变量叫做行指针变量。形式如下数据类型 (*指针变量名)[表达式] ;int a2][3]; int (*p)[3];方括号中的常量表达式表示指针加1移动几个数据。数组指针应用编程实现使用行指针遍历二维数组#includestdio.h int main() { int a[3][4] {{1, 4, 6 ,8 }, {2, 4, 5, 9}, {3 ,6, 9, 1}}; int (*p)[4] a; int i, j; int n, m; ​ printf(%p %p\n, a, a 1); printf(%p %p\n, a[0], a[0]1); n sizeof(a)/ sizeof(a[0]); m sizeof(a[0])/ sizeof(int); for( i 0;i n; i){ for(j 0; j m;j){ //printf(%d, a[i][j]); //printf(%d,*(a[i]j)); //printf(%d,*(*((ai)j))); printf(%d %d %d,p[i][j], *(p[i]j), *(*(pi)j)); } printf(\n);数组指针笔试题int a[3][4] { 0 }; printf(%ld\n, sizeof(a[0])); printf(%ld\n, sizeof(*a)); printf(%ld\n, sizeof(*(a 1))); printf(%ld\n\n, sizeof(*(a[0] 1))); printf(%ld\n, sizeof(a 1)); printf(%ld\n, sizeof(a[0] 1)); printf(%ld\n\n, sizeof(a[0] 1)); printf(%ld\n\n, sizeof(*(a[0] 1)))计算上面给出的值答案16,16,16,16,8,8,8,4int a[] { 1, 2, 3, 4 }; printf(%ld\n, sizeof(a)); printf(%ld\n, sizeof(*a)); printf(%ld\n, sizeof(a 1));答案8,16,8程序运行的结果是什么呢int a[5] { 1, 2, 3, 4, 5 }; ​ int* ptr (int*)(a 1); ​ printf(%d,%d,(a 1),(ptr - 1)); ​答案5,1int a2 { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; ​ int* ptr1 (int*)(a 1); ​ int* ptr2 (int)((a 1)); ​ printf(%d,%d,(ptr1 - 1),(ptr2 - 1)); ​答案10,5int a5; ​ int(*p)[4]; ​ p a; ​ printf(%d\n, p2 - a2); ​答案-2

相关新闻

中兴B860AV1.1-T2免拆ADB刷机指南

中兴B860AV1.1-T2免拆ADB刷机指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:53:43 阅读更多 →
Apache Pulsar 2.1.0 特性深度解析:Pulsar IO、分层存储、有状态函数与 Avro/Protobuf Schema

Apache Pulsar 2.1.0 特性深度解析:Pulsar IO、分层存储、有状态函数与 Avro/Protobuf Schema

消息队列后端流处理 【免费下载链接】pulsar Apache Pulsar - distributed pub-sub messaging system 项目地址: https://gitcode.com/gh_mirrors/pulsar28/pulsar 点击查看 免费下载 本篇技术指南基于 Apache Pulsar 官方 2.1.0-incubating 发布说明展开&#xff…

2026/9/24 6:52:43 阅读更多 →
GitHub游戏skills清单:49个AI员工与16星冷门项目的工程价值

GitHub游戏skills清单:49个AI员工与16星冷门项目的工程价值

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:52:43 阅读更多 →

最新新闻

保安员资格考试教材PDF高效备考指南:四周计划与避坑要点

保安员资格考试教材PDF高效备考指南:四周计划与避坑要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:48:14 阅读更多 →
S32K3多核MCU开发入门:启动流程、核间通信与EB配置详解

S32K3多核MCU开发入门:启动流程、核间通信与EB配置详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:48:14 阅读更多 →
批量视频去硬字幕工具怎么选?工具与批处理专业服务商对比

批量视频去硬字幕工具怎么选?工具与批处理专业服务商对比

每天要处理几十条视频时,逐条设置和检查会成为实际工作。比较批量视频去字幕方案,不能只看一条样片能否把字幕去掉,还要把整批素材的提交、区域设置、结果复核、问题修改、费用和最终文件一起看。网页上完成一次处理很方便,但持续…

2026/9/24 7:48:14 阅读更多 →
论文AI率太高怎么降?有效果兜底的AI智能降重工具推荐,降AI率没达标包退全款

论文AI率太高怎么降?有效果兜底的AI智能降重工具推荐,降AI率没达标包退全款

最近毕业季身边不少同学在论文查重上栽了跟头,尤其是AIGC检测部分更是让人头疼。根据教育部2025年发布的《高等学位论文质量监测年报》显示,全国本科毕业论文中疑似存在AI痕迹的比例高达29.7%,而硕士论文更是攀升至34.2%。随着政策不断收紧&a…

2026/9/24 7:48:14 阅读更多 →
深入解析 Airbyte Typeform Source Connector 的独特行为:单次使用刷新令牌与增量同步设计

深入解析 Airbyte Typeform Source Connector 的独特行为:单次使用刷新令牌与增量同步设计

数据工程数据集成ETL后端大数据 【免费下载链接】airbyte Open-source data movement for ELT pipelines and AI agents — from APIs, databases & files to warehouses, lakes, and AI applications. Both self-hosted and Cloud. 项目地址: https://gitcode.…

2026/9/24 7:48:14 阅读更多 →
ESP32脑电波控制空调:从BCI信号采集到红外发射的完整实战

ESP32脑电波控制空调:从BCI信号采集到红外发射的完整实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:47:13 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →