我一直弄不清楚”指针数组“和”数组指针“的区别,最近这段时间看到了一些关于数组和指针的关联和区别的资料,然后总结了下这两个概念的区别,以备后续查看。

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

关于“指针数组”和”数组指针“相关推荐

  1. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  2. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  3. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  4. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  5. C指针4:数组指针(指向数组的指针)

    先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...

  6. extern数组与extern指针

    数组名代表了存放该数组的那块内存,它是这块内存的首地址.这就说明了数组名 是一个地址,而且,还是一个不可修改的常量,完整地说,就是一个地址常量.数组名 跟枚举常量一样,都属于符号常量.数组名 这个符号 ...

  7. c语言中的字节和元素,C语言指向数组元素的指针

    指向数组元素的指针和运算法则 所谓指向数组元素的指针,其本质还是变量的指针.因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针. 指向数组元素的指针不难,但很 ...

  8. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

  9. 用指针实现删除数组中小于10的数据

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p92 5.1.2 上级实训内容 [实训内容5]用指针实现删除数组中小于10的数据 正确程序已更新 正确 ...

  10. 【C语言】12-指向一维数组元素的指针

    本文目录 一.用指针指向一维数组的元素 二.用指针遍历数组元素 三.指针与数组的总结 四.数组.指针与函数参数 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能 ...

最新文章

  1. PyTorch 1.6正式发布!新增自动混合精度训练、Windows版开发维护权移交微软
  2. hadoop_单元测试Java Hadoop作业
  3. python花钱培训值吗-Python培训班学生刚学到70%就拿到月薪万元的Offer
  4. OSError: Cannot initialize new instance of inotify, Errno=Too many open files (EMFILE) 问题解决
  5. java ppt转html_word,ppt,excel转pdf,pdf转html工具类搭建
  6. 2c总线的布线宽度_PCIExpress总线接口的布线规则
  7. 小学生计算机课件,小学三年级计算机教学课件
  8. AngularJS 实现页面滚动到底自动加载数据的功能
  9. iOS开发特效源码:swift轮播图导航渐变跑马灯分段选择下拉菜单物流时间轴
  10. exe变计算机病毒,文件夹变exe病毒怎么恢复 文件夹exe病毒的解决方法
  11. 读《About Face 4 交互设计精髓》22
  12. 2020年最新-Java基础面试题
  13. SPSS常见数据分析方法比较汇总
  14. DrugBank总结
  15. linux 无法切换为root权限不够,Linux入门教程:Ubuntu16.04解决无法切换root权限的问题,...
  16. Java MultipartFile实现文件上传(一)
  17. hg(Mercurial)使用参考
  18. 武汉大学计算机技术上机难度,武汉大学计算机技术(专业学位)考研难不难和研究生专业好不好...
  19. 如何用计算机的思维去思考问题?
  20. 自动排课系统的设计与实现 开题报告 java_学校排课系统设计与实现(附源程序)...

热门文章

  1. 软件工程概论第十三周学习进度
  2. django-pure-pagination 分页插件
  3. 在 WinForm 中使用 Direct2D
  4. html5 乱码解决方案
  5. SDUT 1149 勾股定理第一弹 勾股数
  6. LAMP 补充----非原创
  7. 好东西,将你的英文版TFS变为中文版?:Visual Studio 2005 Team Foundation Server 语言更改包...
  8. tcpdf html 支持css吗,TCPDF 5.1 发布,增加对CSS的支持
  9. 03-04 元素定位工具
  10. 01-07 Linux三剑客-grep