博客
关于我
数组指针和指针数组
阅读量:322 次
发布时间:2019-03-04

本文共 1127 字,大约阅读时间需要 3 分钟。

1.数组指针

2.指针数组

1.数组指针

数组指针:即“数组的指针”,本质为指针,只不过这个指针指向数组而已 。如 int (*p)[4] ,说明这个指针p 指向了一个里面有4个int元素的数组

由于 ()的优先级比 []高,*和p先结合,所以 (*p)[4] 本质为指针

#include 
int main () { int a[3]={1,2,3}; int (*p)[3]; p=&a; printf("%p\n",*p); //打印结果:0x7ffc6f432570 printf("%p\n",p); //打印结果:0x7ffc6f432570 printf("%p\n",p[0]); //打印结果:0x7ffc6f432570 printf("%d\n",**p); //打印结果:1 printf("%d\n",*p[0]); //打印结果:1 return 0;}

第7,8,9行,打印的结果一样的原因:

 p = &a 表示 p变量装着 数组 a 的地址。 所以 p 为数组 a 的地址。而 *p 就是指数组a本身,当如何标识一个数组呢?就是用数组的首元素地址来标识一个数组。

而数组的首元素地址 和 数组的地址 在值上是一样的。所以 *p 和 p 的值也是一样的。

p 既然是数组a的地址,那 p[0] 自然也是数组首元素的地址了。所以 p 和 *p 和 p[0] 是一样的

当 *p 表示的数组首元素地址时,**p 自然就是表示首元素本身(即首元素的值)。

*p[0] ,因为 []优先级比较高, p[0] 表示首元素地址,所以 *p[0] 就是表示首元素本身。所以 **p = *p[0]

2.指针数组

指针数组:即“指针的数组” ,本质为数组,只不过数组里装的是指针。如 int *p[4] 表示此数组里有4个元素,这4个元素的类型都是 int* 类型。

由于 []的优先级比 * 高,所以 *p[4] 本质为数组

#include 
int main () { int a = 1; int b = 2; int *p[2]; //指针数组 p[0] = &a; //p[0] 装 a的地址 p[1] = &b; //p[1] 装 b的地址 printf("%d\n",*p[0]); //打印结果:1 printf("%d\n",*p[1]); //打印结果:2 return 0;}

额外:

数组指针 和 指针数组 若变量名一样(例如都为p),他们的写法就只有符号优先级的区别,如:

int *p[3] ------指针数组

int (*p)[3] ------数组指针

转载地址:http://mzbh.baihongyu.com/

你可能感兴趣的文章
测试流程规范--测试报告模板
查看>>
测试流程规范--提测规范(钉钉、邮件)
查看>>
Linux上TCP的几个内核参数调优
查看>>
解Bug之路-dubbo流量上线时的非平滑问题
查看>>
记一次讲故事机器人的开发-我有故事,让机器人来读
查看>>
从Linux源码看Socket(TCP)的listen及连接队列
查看>>
高德网络定位算法的演进
查看>>
高德算法工程一体化实践和思考
查看>>
为亿级用户的美好出行而战!高德地图首届算法大赛落幕 95后北邮在读博士带队夺冠
查看>>
重温网络编程——常识(三)
查看>>
判断一个数是否是2的幂
查看>>
js 闭包(新)
查看>>
vscode 编辑python 如何格式化
查看>>
正则表达针对html(九)
查看>>
seo 回忆录百度基本概念(一)
查看>>
重新整理数据结构与算法(c#)—— 算法套路二分法[二十四]
查看>>
不一样的备忘录模式(设计模式十六)
查看>>
【golang-GUI开发】qt之signal和slot(一)
查看>>
kettle 执行 kjb 临时文件夹 /tmp permission denied 问题
查看>>
Markdown使用笔记
查看>>