当前位置: 首页 > news >正文

【嵌入式C语言】06.数组和指针的关系

一、一维数组和指针之间的关系

1.两个重要的结论

结论一:数组名出现在表达式中代表该数组首元素的地址

数组名相当于是个指针,一个指向本数组首元素地址的指针

结论二:

数组名前面&,表示的是指向整个一维数组的一个指针(数组指针)

2.一维数组和指针的关系

2.1 访问数组的方法

第一种:数组名[下标]

a[1];

第二种: *(数组名+1)

*(a+1);

第三种:引入单独的指针,指向数组的首元素

int p=a; //a等价于&a[0]

p[0]; //等价于a[0]

p[1]; //等价于a[1]

*(p+2); //等价于a[2]

2.2 两个指针相减

表示数组中两个指针之间间隔了多少个数据

int a[10]={45,89,96,12};

int *p1=a;

int *p2=&a[7];

p2-p1结果是多少?

注意:经典错误理解成直接用地址值做减法

2.3 关于一维数组名的几种写法

a int *类型的指针

&a 数组指针

a[0] 非指针,数组首元素值

&a[0] 数组首元素的地址

a+1 加类型的大小 4个字节

&a+1 加的是整个数组的大小

a[0]+1 a[0]的值加1

&a[0]+1 加类型的大小 4个字节

二、数组指针和指针数组

1.数组指针(中心词是指针)

1.1 概念

int *p; int类型指针

char *p; char类型指针

数组 *p;数组类型指针 --》数组指针 --》指向某个数组的指针

类型 (*指针名)[数组元素个数]

1.2 如何定义数组指针

int a[10];

char b[15];

int (*p)[10]=&a; //定义了 int[10]类型的数组指针,指向数组a

char (*q)[15]=&b; //定义了 char[15]类型的数组指针,指向数组b

2.指针数组(中心词是数组)

2.1 概念

数组中存放的全部都是指针,这种数组就叫做指针数组

类型 数组名[元素个数]

情况1:类型是指针 --》这种数组叫做指针数组

int *buf[10];

情况2:类型非指针 --》这种数组就是我们前面学习过的普通类型的数组

int buf[10];

int a[10]; //10个int

char b[5]; //5个char

int *c[3]; //3个int *

char *d[4]; //4个char *

2.2 如何定义指针数组

指针类型 数组名[数组元素个数];

三、二维数组和指针之间的关系

1.两个重要的结论

结论一:二维数组名出现在表达式中代表该数组首元素的地址

二维数组名相当于是个指针,一个指向本数组首元素地址的指针

把二维数组理解为特殊的一维数组

比如:char a[3][20]; //理解为包含了3个 char[20]的数组

int b[7][15]; //理解为包含了7个 int[15]的数组

结论二:

二维数组名前面&,表示的是指向整个二维数组的一个指针(数组指针)

2.二维数组和指针的关系

2.1 访问数组的方法

第一种:数组名[下标][下标]

a[i][j];

第二种:引入单独的指针,指向数组的首元素

2.2 两个指针相减

表示数组中两个指针之间间隔了多少个数据

注意:经典错误理解成直接用地址值做减法

2.3 关于有二维数组名的几种写法

a 二维数组首元素的地址 --》 a[0]的地址,数组指针 int (*p)[10]

&a 数组指针 int (*p)[7][10]

a[0] 第一个一维数组int[10]的名字,表示该数组首元素a[0][0]的地址 int *

&a[0] 数组指针 int (*p)[10]

a[0][0] 非指针

&a[0][0] int *

a+1 加类型的大小 int[10]大小

&a+1 加的是整个数组的大小,int[7][10]大小

a[0]+1 4个字节

&a[0]+1 加类型的大小 int[10]大小

a[0][0]+1 把数据加1

&a[0][0]+1 4个字节

指针的类型决定了加减1的步长

我的理解:

练习题

1.计算结果

#include

int main()

{

int x[]={10,20,30};

int *px=x;

printf("%d",++*px);

printf("%d",*px);

px=x;

printf("%d",(*px)++);

printf("%d",*px);

px=x;

printf("%d",*px++);

printf("%d",*px);

px=x;

printf("%d",*++px);

printf("%d",*px);

return 0;

}

2.下面程序的输出是

int main()

{

int a[5]={1,2,3,4,5};

int *ptr=(int *)(&a+1);

printf("%d, %d\n",*(a+1),*(ptr-1))

}

3.下面判断正确的是

A. char *a="china";等价于char *a; *a="china";

B. char str[10]={"china"};等价于char str[10]; str[]={"china"};

C. char *s="china";等价于char *s; s="china";

D. char c[4]="abc",d[4]="abc";等价于char c[4]=d[4]="abc";

C

自己:A的类型不匹配

B的数组名是常量地址不能修改(赋值)

D的数组名是常量地址不能修改(赋值)

4.#include

void main( )

{

int a=99;

int b=99;

char s1[]="Hello World!";

char s2[]="Hello World!";

if(s1==s2 )

printf(“Equal!”);

else

printf(“Not equal!”);

}

Not equal!

5.#include

void main( )

{

char s[]="Hello World!";

char* p = s;

int n=10;

printf("%d %d %d %d\n",sizeof(s),sizeof(p),strlen(p),sizeof(n));

}

13 8 12 4

注意打印类型:sizeof和strlen否用%zu打印!

6.char buf[10]="gecchina";

char *p=&buf[3];

p=p+2;

*p='#';

printf("buf is:%s\n",buf);

printf("p is:%s\n",p);

gecch#na

#na

7.char buf[5][10]={"hello","world","china"};

char *p=&buf[1][3];

char *q=&buf[2][1];

printf("q-p is:%d\n",q-p);

http://www.jsqmd.com/news/1128524/

相关文章:

  • 下服务器端开发流程及相关工具介绍(C++)
  • AI简历工具怎么选?2026年7款主流产品横评:鹅来面/AI简历姬/职徒/知页/Zety/Teal深度对比
  • Redis分布式锁进阶第三十八篇
  • Unlock Music:3分钟本地解密QQ音乐、网易云音乐的完整指南
  • 基于WSEN-ISDS和TM4C129的三轴运动追踪系统设计
  • Obsidian 同步到底怎么选?2026 年主流方案实测对比
  • 2026年指纹浏览器封号率实测对比,哪款防封能力真正经得起考验?
  • CTMS 执行传输报错:Exception during start of deployment for deploy type ‘SLP_CTS‘
  • 光刻胶 配套化学品|纯技术专家线晋升 CTO完整路径、薪资、晋升核心卡点
  • 软考:高级软件架构师学习笔记------了解软考
  • 来可云城际订票系统|车队订单驱动式车辆调度模块功能详解
  • C++图形化打字模拟,单字依次输入(极简可行)
  • YOLO11目标检测入门:猜拳识别实战指南
  • 【SpringBoot篇】SpringBoot WebFlux响应式大文件流式上传下载实战(Flux<DataBuffer>低内存原理、源码解析、落地方案)
  • 医用修护敷料选购指南:资质、成分与剂型的硬核拆解
  • 基于 Java Swing + MySQL C/S 即时通讯聊天系统完整开发记录
  • TensorRT量化模型部署实战:从QAT到INT8推理的工程陷阱
  • 【Java项目-企悦抽】02-AI赋能产品需求规格说明书
  • 吃透SQL查询优化:真实线上案例+Explain深度解析
  • 企业级Java电商系统选型路线图:从零到上线全流程拆解
  • 小学期十八周
  • 第十八周小学期
  • 前端工程化-02:一个完整的vue工程结构模板
  • lsm6dsv16x
  • 开源商城源码下载后能商用吗?这3款Apache-2.0协议商城放心用
  • 卫星被云挡住后,AI还能知道洪水淹到哪里吗?
  • 15-DifusionMOT:一种基于扩散算法的多目标跟踪器
  • STM32与LV3296条形码模块的硬件协同与优化方案
  • 【花雕动手做】行空板 K10 系列实验之 TT 马达四驱动全向福来轮语音控制智能小车
  • NohBoard:重新定义键盘操作可视化的创新解决方案