恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

嵌入式基础day07学习笔记

  • 首页
  • 资讯中心
  • /
  • 嵌入式基础day07学习笔记

相关资讯

实习多平台和传统招聘平台有什么区别?4个维度对比 2026/9/24 6:47:55
短波红外相机选型指南:5.0µm像元与130万像素实战解析 2026/9/24 6:47:55
Yii 2 数据库入门实战:Active Record、Pagination 与 LinkPager 构建国家列表页面 2026/9/24 6:47:55

最新资讯

LMX2594频率合成器配置实战:从TICS Pro到MCU寄存器集成
SpringBoot+Vue+MySQL水果商城系统源码解析与运行指南
天问Block图形化开发STC单片机:从入门到进阶实战指南
L型活塞式空气压缩机结构设计与热力计算全流程解析
NanoVNA实战:NFC天线阻抗匹配与调试全指南
STM32不掉电时钟方案:DS1302+纽扣电池实战记录

今日推荐

JavaWeb购物车系统实现:基于Session存储的完整工程示例
面向对象综合训练:从图书管理系统掌握封装、继承与多态
Lombok与JDK版本冲突引发NoSuchFieldError:根因排查与修复指南

本周热门

BrewUI:给Homebrew套上图形界面,让macOS软件包管理更简单
BrewUI:让Homebrew包管理变得可视化与高效
公式与文本对齐全攻略:从Word到LaTeX的实用技巧

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

嵌入式基础day07学习笔记

发布时间:2026/9/24 6:52:56
嵌入式基础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

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号