关于“指针数组”和”数组指针“
我一直弄不清楚”指针数组“和”数组指针“的区别,最近这段时间看到了一些关于数组和指针的关联和区别的资料,然后总结了下这两个概念的区别,以备后续查看。
1、区分指针数组和数组指针
short *ptr[10]; //指针数组,可理解为:存放指针的数组
short (*ptr1)[10]; //数组指针,可理解为:指向数组的指针
ptr为指针数组,可以这么看(short *) ptr[10],即ptr首先是长度为10的数组,其类型为(short *)型,或者说该数组的元素类型是指针类型;
ptr1是数组指针,可以这么看(short [10]) *ptr1,即ptr1首先是指针,该指针指向的是长度为10的shor型数组,或者说该指针存储的是长度为10的short型数组的地址,可以如下初始化ptr1:
short a[10];
ptr1 = &a;
2、sizeof与指针数组、数组指针
(1)short *p1[100];
sizeof(p1) = 400;
sizeof(p1[0]) = 4;
sizeof(*p1) = 4;
sizeof(*p1[0]) = 2;
分析:这里p1为指针数组,根据上述分析p1的元素类型是short *
sizeof(p1[0]) = sizeof(*p1) = 4(注:任意指针的sizeof大小均为4);
*p1[0] 为short型,sizeof(*p1[0]) = sizeof(short) = 2 ;
故,sizeof(p1) = 100 *sizeof(short *) =100 * 4 = 400;
(2)short (*p2)[100];
sizeof(p2) = 4;
sizeof(p2[0]) = 200;
sizeof(*p2[0]) = 2;
sizeof(*p2) = 4;
分析:p2是数组指针,根据上面的分析p2为指针,相当于如下定义:short p2[][100];
所以,sizeof(p2) = 4,sizeof(*p2) = 4;
p2[0] = short [100],sizeof(p2[0]) = 100 * sizeof(short) = 100 * 2 =200;
*p2[0] = p2[0][0],所以有:sizeof(*p2[0]) = sizeof(short) = 2;
(3)short (*p3[5])[3];
sizeof(p3) = 20;
sizeof(p3[0]) = 4;
sizeof(*p3) = 4;
sizeof(*p3[0]) = 6;
sizeof((*p3[0])[0]) = 2;
分析:关于声明从名字开始读,然后按照优先级顺序读取(详细方法见《C专家编程》第三章P65)
这里p3是指针数组,该数组有5个元素,每个元素都是一个指针,每个指针都指向一个含有3个元素的数组;
所以,sizeof(p3) = 5 * sizeof(short *) = 5 * 4 = 20;
p3[0]仍然是指针,指向数组short [3],sizeof(p3[0]) = sizeof(short *) = 4;sizeof(*p3) = 4;
*p3[0] 相当于指针p3[0]的解引用,指向第一个数组的起始地址,所以sizeof(*p3[0])相当于求第一个数组的内存大小:sizeof(*p3[0]) = sizeof(short [3]) = 3 * sizeof(short) = 6;
(*p3[0])[0] 相当于数组的第一个元素,相当于*p[0][0]所以sizeof((*p3[0])[0]) = sizeof(short) =2;注意:p3[0][0]也是一个指针,指向数组的第一个元素。sizeof(p3[0][0]) = 6;
转载于:https://www.cnblogs.com/dpflnevergiveup/p/3279150.html
关于“指针数组”和”数组指针“相关推荐
- C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...
- 关于C语言中的数组指针、指针数组以及二级指针
概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...
- C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)
1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...
- Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参
1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...
- C指针4:数组指针(指向数组的指针)
先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...
- extern数组与extern指针
数组名代表了存放该数组的那块内存,它是这块内存的首地址.这就说明了数组名 是一个地址,而且,还是一个不可修改的常量,完整地说,就是一个地址常量.数组名 跟枚举常量一样,都属于符号常量.数组名 这个符号 ...
- c语言中的字节和元素,C语言指向数组元素的指针
指向数组元素的指针和运算法则 所谓指向数组元素的指针,其本质还是变量的指针.因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针. 指向数组元素的指针不难,但很 ...
- C语言指针数组与数组指针的区别
C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...
- 用指针实现删除数组中小于10的数据
<程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p92 5.1.2 上级实训内容 [实训内容5]用指针实现删除数组中小于10的数据 正确程序已更新 正确 ...
- 【C语言】12-指向一维数组元素的指针
本文目录 一.用指针指向一维数组的元素 二.用指针遍历数组元素 三.指针与数组的总结 四.数组.指针与函数参数 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能 ...
最新文章
- PyTorch 1.6正式发布!新增自动混合精度训练、Windows版开发维护权移交微软
- hadoop_单元测试Java Hadoop作业
- python花钱培训值吗-Python培训班学生刚学到70%就拿到月薪万元的Offer
- OSError: Cannot initialize new instance of inotify, Errno=Too many open files (EMFILE) 问题解决
- java ppt转html_word,ppt,excel转pdf,pdf转html工具类搭建
- 2c总线的布线宽度_PCIExpress总线接口的布线规则
- 小学生计算机课件,小学三年级计算机教学课件
- AngularJS 实现页面滚动到底自动加载数据的功能
- iOS开发特效源码:swift轮播图导航渐变跑马灯分段选择下拉菜单物流时间轴
- exe变计算机病毒,文件夹变exe病毒怎么恢复 文件夹exe病毒的解决方法
- 读《About Face 4 交互设计精髓》22
- 2020年最新-Java基础面试题
- SPSS常见数据分析方法比较汇总
- DrugBank总结
- linux 无法切换为root权限不够,Linux入门教程:Ubuntu16.04解决无法切换root权限的问题,...
- Java MultipartFile实现文件上传(一)
- hg(Mercurial)使用参考
- 武汉大学计算机技术上机难度,武汉大学计算机技术(专业学位)考研难不难和研究生专业好不好...
- 如何用计算机的思维去思考问题?
- 自动排课系统的设计与实现 开题报告 java_学校排课系统设计与实现(附源程序)...