尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
嵌入式基础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
RELATED

相关推荐

中兴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:54:06
FerretDB 构建 MongoDB 兼容开发者体验:Vultr 云服务实践与开源替代方案解析

FerretDB 构建 MongoDB 兼容开发者体验:Vultr 云服务实践与开源替代方案解析

后端数据库文档数据库 【免费下载链接】FerretDB A truly Open Source MongoDB alternative 项目地址: https://gitcode.com/gh_mirrors/fe/FerretDB 点击查看 免费下载 FerretDB 是一个基于 PostgreSQL 构建的真正开源 MongoDB 替代方案。本文以 FerretDB 团队与 …

📅 2026/9/24 6:49:06
短波红外相机选型:5.0µm像元与130万像素的平衡之道

短波红外相机选型:5.0µm像元与130万像素的平衡之道

/* 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:49:06
MORE NEWS

更多资讯

📰

工控现货的本质:四层技术校验与系统兼容性保障

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

📰

硕博新生入学适应指南:助力学子快速开启新阶段学术成长之路

每次找到心仪的外国文献,却被付费墙冷冷地挡在外面,是不是感觉科研的热情瞬间被浇灭?作为学生党,我太懂这种无力感了。但好消息是,通过几个合法且免费的“通道”和技巧,我们完全能实现“文献自由”。今天分…

📰

LanceDB Node.js 物化视图列选择:深入解析 MaterializedViewSelect 类型别名

向量数据库数据库人工智能后端 【免费下载链接】lancedb Developer-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less. 项目地址: https://gitcode.com/gh_mirrors/la/lancedb 点击查看 免费下载 导读 在 LanceDB 的 Node.j…

📰

玩客云刷Armbian部署Home Assistant:低成本智能家居中枢实战

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

📰

PRQL 的 Raku 语法实现:从 Grammars 定义到形状断言测试的完整指南

后端 【免费下载链接】prql PRQL is a modern language for transforming data — a simple, powerful, pipelined SQL replacement 项目地址: https://gitcode.com/gh_mirrors/pr/prql 点击查看 免费下载 PRQL(Pipelined Relational Query Language&am…

📰

PulseBlaster在NV色心实验中的纳秒级时序控制原理与实践

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

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬