指针数组:

指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。

数组指针:

数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

指针数组

首先先定义一个指针数组,既然是数组,名字就叫arr

char *arr[4] = {"hello", "world", "shannxi", "xian"};

arr[4]是一个定义的数组。把它对应到对应到内存中,arr是一个在栈区,有四个元素的数组,而每一个元素又是一个指针,所以说它的四个元素各占四个字节,所以变量arr的大小是16个字节。arr+1会跳过四个字节。也就是一个指针的大小 。

数组指针

首先来定义一个数组指针,既然是指针,名字就叫pa,要给指针加括号。

char (*pa)[4];

pa是一个指针指向一个char [4]的数组,每个数组元素是一个char类型的变量。既然pa是一个指针,存放一个数组的地址,那么在我们定义一个数组时,数组名称就是这个数组的首地址,那么这二者有什么区别和联系呢

char a[4];

数组名称和数组指针的区别

a是一个长度为4的字符数组,a是这个数组的首元素首地址。既然a是地址,pa是指向数组的指针,那么能将a赋值给pa吗?答案是不行的!因为a是数组首元素首地址,pa存放的却是数组首地址,a是char 类型,a+1,a的值会实实在在的加1,而pa是char[4]类型的,pa+1,pa则会加4,虽然数组的首地址和首元素首地址的值相同,但是两者操作不同,所以类型不匹配不能直接赋值,但是可以这样:pa = &a,pa相当与二维数组的行指针,现在它指向a[4]的地址。

char *p=a;   //p是指向数组首元素的指针

数组名和指针虽都代表数组首元素的地址,但意义不同。把它们分别比作省政府和市政府,数组名相当于省政府,指向首元素的指针代表市政府。如陕西的省政府在西安,而西安市的市政府也在西安,两个政府都在西安,但其代表的意义完全不同。
 ①用sizeof关键字求数组所占的内存是整个数组大小,指针不是。
 ②对数组名取地址时是取得一个代表整个数组的地址,对指针取地址则不然。

指针数组在参数传递时的使用

指针数组常用在主函数传参,在写主函数时,参数有两个,一个确定参数个数,一个这是指针数组用来接收每个参数(字符串)的地址
int main(int argc, char *argv[])
不能传递整个数组过去,如果数组很大,这样内存利用率很低,所以应该传递数组的首地址,用一个指针接收这个地址。因此,指针数组对应着二级指针
void fun(char **pp); //子函数中的形参
fun(char *p[]); //主函数中的实参

数组指针传参时的使用

数组指针既然是一个指针,那么就是用来接收地址,在传参时就接收数组的地址,所以数组指针对应的是二维数组

void fun(int (*P)[4]);           //子函数中的形参,指针数组
a[3][4] = {0};                 //主函数中定义的二维数组
fun(a);                         //主函数调用子函数的实参,是二维数组的首元素首地址


sizeof(a)=12*4=48
sizeof(p)=4 //(x64系统为8)
当sizeof用于变量时返回这个变量占用的实际空间的大小。当sizeof用于数组名时,返回整个数组的大小(这里的大小指占用的字节数)。p是一个指针变量,这个变量占用四个字节。

c++数组指针和指针数组详解相关推荐

  1. 函数指针与回调函数详解

    函数指针与回调函数详解 1.什么是函数指针? 函数(的)指针就是指针.这个指针存放一个函数的地址,而函数的名称就该函数的入口,即地址.这类似于数组名就是数组的首地址.我们可以通过反汇编直观的查看到函数 ...

  2. python画二维散点图-基于python 二维数组及画图的实例详解

    1.二维数组取值 注:不管是二维数组,还是一维数组,数组里的数据类型要一模一样,即若是数值型,全为数值型 #二维数组 import numpy as np list1=[[1.73,1.68,1.71 ...

  3. php 打印对象详细信息,php打印显示数组与对象的函数详解

    php打印显示数组与对象的函数详解 发布于 2014-11-17 18:55:49 | 699 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext P ...

  4. 转 常量指针和指针常量的区别详解

    传送门 常量指针和指针常量的区别详解 在C/C++中关键字const用来定义一个只读的变量或者对象,有如下优点     (1)便于类型检查,如函数的函数 fun(const int a) a的值不允许 ...

  5. 【Python】Numpy数组的切片、索引详解:取数组的特定行列

    [Python]Numpy数组的切片.索引详解:取数组的特定行列 文章目录 [Python]Numpy数组的切片.索引详解:取数组的特定行列 1. 介绍 2. 切片索引 2.1 切片索引先验知识 2. ...

  6. python数组相减_对Python 中矩阵或者数组相减的法则详解

    对Python 中矩阵或者数组相减的法则详解 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下: 定义了一个计算损失的函数: def error(yhat,labe ...

  7. ❤️导图整理数组6:四数组的四数之和,详解Counter类实现哈希表计数,力扣454❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

  8. shell编程数组与冒泡算法排序详解

    shell编程数组与冒泡算法排序详解 一 数组的四种表达方式 二 数组的增删改查操作 三 数组传参 3.1 主程序向函数传数组参数 3.2 从函数返回数组到主程序 四 冒泡算法排序 一 数组的四种表达 ...

  9. matlab合并有序数组,《数组合并》JS合并两个数组的3种方法详解

    这篇文章主要介绍了JS合并两个数组的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一个包解决你所有的JS问题,点击获取 需要将两个数组 ...

  10. python画二维数组散点图_基于python二维数组及画图的实例详解

    基于python二维数组及画图的实例详解 下面小编就为大家分享一篇基于python 二维数组及画图的实例详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1.二维数组取值 注:不管 ...

最新文章

  1. 什么是embedding?
  2. 漫谈我国主流人工智能软件基础设施
  3. sysbench的安装详解
  4. 用软件如何识别pdf文字
  5. 软件工程第二次作业——结对编程
  6. 纳米技术系列:物联网的下一个大事件竟来自极小之处
  7. PHP实现飞信接口来通过网页免费发短信
  8. antd树型选择控件选择父级_element的tree树形菜单回显、父级半勾选
  9. 【构建更好的软件—TeamDev】上海道宁为您带来强大且富有洞察力的TeamDev产品及自定义解决方案
  10. 能模仿韩寒小四写作的神奇循环神经网络
  11. Scrum在大型游戏团队中的应用
  12. 2022年最新crm管理系统免费试用-从0了解crm
  13. MFC将窗口的关闭键(叉叉)变为不可用/可用
  14. C语言中八进制和16进制怎么表示,原码,反码及补码,C语言按位取反运算符~
  15. 玩彩票赢钱概率有多少?用Python来告诉你
  16. Redis 分布式锁实现原理
  17. 使用您的Android手机进行比较商店:审查了4个扫描仪应用程序
  18. cnpm : 无法加载文件 C:\Users\***\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本
  19. 微信公众号怎么放这种带图片的链接?
  20. 疫情下海外城市轨道交通信号系统项目集管理实践

热门文章

  1. 全网最简单的百度网盘提速方法!!!!
  2. java通过输入的方式给int数组赋值并输出数组
  3. Java UT用例实践记录
  4. JAVA高并发程序设计(葛一鸣著)读书笔记
  5. eclipse安装c语言开发linux,在linux下安装eclipse 开发c语言程序
  6. html网页收藏夹小图标,在网页标题栏上和收藏夹显示网站logo的实现方法
  7. 如何确定抽样的样本数量
  8. 什么是Core Dump?
  9. 基于javaweb的在线车队货车管理系统(java+ssm+jsp+bootstrap+mysql)
  10. 小新padpro2021实体键盘快捷键备忘