
数组指针和指针数组
发布日期:2021-05-07 04:41:11
浏览次数:17
分类:精选文章
本文共 1127 字,大约阅读时间需要 3 分钟。
1.数组指针
2.指针数组
1.数组指针
数组指针:即“数组的指针”,本质为指针,只不过这个指针指向数组而已 。如 int (*p)[4] ,说明这个指针p 指向了一个里面有4个int元素的数组
由于 ()的优先级比 []高,*和p先结合,所以 (*p)[4] 本质为指针
#includeint 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] 本质为数组
#includeint 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] ------数组指针
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月02日 05时11分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java纯文本文件显示工具制作
2021-05-08
三、案例:留言板 & url.parse()
2021-05-08
LeetCode:28. 实现 strStr()——————简单
2021-05-08
Nginx配置反向代理与负载均衡
2021-05-08
Lionheart万汇:布林线双底形态分析技巧
2021-05-08
Vue使用bus进行组件间、父子路由间通信
2021-05-08
数据库三个级别封锁协议
2021-05-08
类的实例
2021-05-08
tomcat加载部署webapps目录下的项目
2021-05-08
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2021-05-08
方法重写
2021-05-08
Threading Programming Guide(多线程编程指南)
2021-05-08
Java求逆波兰表达式的结果(栈)
2021-05-08
SDWebImage--http图片加载不出来的问题
2021-05-08
Application received signal SIGSEGV
2021-05-08
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2021-05-08
SLAM学习笔记-求解视觉SLAM问题
2021-05-08
普歌-允异团队-HashMap面试题
2021-05-08
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
2021-05-08
程序员应该知道的97件事
2021-05-08