区分指向数组元素的指针、指向数组的指针、指针数组

指向数组元素的指针

这类指针比较常见,例如

int a[3] = {1, 2, 3};
int *p;
p = a;//将数组的地址(也即数组首元素的地址)赋给指针p,相当于指针p指向数组的首元素

这样,我们就可以用*(p+0)*(p+1)等等访问数组元素了。
同样的,这类指针也适用于二维数组,例如

int a[3][3] = {{1, 2, 3},{4, 5, 6}, {7, 8, 9}};
int *p;
p = a;

这样我们可以通过*(p+0)访问a[0][0],通过*(p+3)访问a[1][0]等等,就相当于把二维数组看作一维数组。当然也可以适用指向数组的指针来表示,见下节。


指向数组的指针

我们首先需要搞清楚二维数组的地址表示。
假设有二维数组int a[3][3] = {{1, 2, 3},{4, 5, 6}, {7, 8, 9}};,假设数组的起始地址为2000,则

a = 2000;
a[0] = 2000;
a[1] = 2012;
&a[0][0] = 2000;
&a[0][1] = 2004;

即数组名代表数组的首地址,也是行首地址;第一维度的数组名代表了每一行的首地址,如a[1] = 2012
在一维数组中有*a=a[0] *(a+1)=a[1];推广到二维数组中一样适用。
即在二维数组中,同样也有*a=a[0] *(a+1)=a[1],因此*(*(a+1)+1)=a[1][1]
我们函数中传递二维数组,可以将指向二维数组每一行的指针传入,即指针中存储的是二维数组每一行的行地址。
指向数组的指针是指向一维数组首元素的指针,即p=a[0]p+1=a[1],表明当指针指向一维数组后,每次+1增长的长度为整个一行的字节长度。
使用int (*p)[3]来定义这类指针,括号不能去掉,后面的下标3代表指向的一维数组的长度是3,注意不是二维数组的行数。
当把这类指针传进函数后,便可通过*(*(p+i)+j)访问二维数组中的每一个元素了。


指针数组

指针数组即一个数组内存储的均为同类型的指针。例如

int *p[4];

表示p这个数组内存的都是指向int型的指针。

区分指向数组元素的指针、指向数组的指针、指针数组相关推荐

  1. 数组元素替换_Linux Shell 通俗简要的讲解数组操作

    Shell 数组 什么是数组?学过计算机编程语言的同学们都知道,数组的特性就是一组数据类型相同的集合 Bash Shell 数组中可以存放多个值,且只支持一维数组(不支持多维数组),初始化时不需要定义 ...

  2. php for循环可以变量关联数组,数组字符串变量之间的转换,数组元素的回调,for循环遍历关联数组...

    实例 header("content-type:text/html;charset=utf-8"); /*数组与字符串转换*/ //1.list()用在索引数组上 list($na ...

  3. 在c语言中数组下标的最小值,数组元素下标的上限_c语言中,数组元素的下标下限为...

    展开全部 c语言中,数组元素的下标下限为0. 数组中的各元素的存e69da5e887aa62616964757a686964616f31333431373230储是有先后顺序的,它们在内存中按照这个先 ...

  4. 数组元素下标的上限_c语言中,数组元素的下标下限为

    展开全部 c语言中,数组元素的下标下限为0. 数组中的各元素的存e69da5e887aa62616964757a686964616f31333431373230储是有先后顺序的,它们在内存中按照这个先 ...

  5. c语言文本按行分配数组元素,【转】C语言中动态分配数组

    int main() { int i = 0; int *a; int N; printf("Input array length: "); scanf("%d" ...

  6. 数组元素两两组合 php,js多个数组元素两两组合三三组合

    我的思路是这样的: 先看成一个组合的问题([x]选n) 再写一个过滤器把含有有同一组元素的组合过滤掉. 这样扩展性会比较好; //合并数组 function concat(...arrs){ retu ...

  7. c语言数组元素下标下限1,C语言中,数组元素的下标下限为

    明带哪项正确子头子透子从部进为精的A的过精过入卵.卵卵巢程即程B.受,语言中关于叙述以下与着床的受精. 纳差,数素患儿未接接种预防受过,重近3天加,温3体检:体,咳嗽热.8天因发,患者日咳有百附近. ...

  8. 一维数组所有元素是否大于_【C语言】- 指向一维数组元素的指针!你今天学习了吗?...

    前面我们已经学习了指针,如果指针存储了某个变量的地址,我们就可以说指针指向这个变量.数组及其数组元素都占有存储空间,都有自己的地址,因此指针变量可以指向整个数组,也可以指向数组元素. 一.用指针指向一 ...

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

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

  10. 细说PHP笔记03(第7章)--数组与数据结构,数组定义,数组遍历,数组内部指针遍历,键值操作函数,统计数组函数,回调函数处理数组元素,数组排序,拆分、合并、分解、结合数组,数组实现堆栈,随机选取元素

    1.数组 索引数组:索引值是整数 关联数组:索引值是字符串 2.数组的定义 1.以直接赋值的方式声明 $数组名[下标]=资料内容 或 $数组名[关联字符串(键值)]=资料内容 <?php $va ...

最新文章

  1. [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作
  2. 【iCore3 双核心板_FPGA】实验二十七:基于SDRAM的TFT驱动器的设计
  3. C# 判断字符串是否符合十六进制,八进制,二进制和十进制整数格式的正则表达式...
  4. UEditor文本浏览器,引号加斜杠解决
  5. MySQL存储引擎和外键学习
  6. .NET Core开发实战(第11课:文件配置提供程序)--学习笔记
  7. 使用mvc时,在视图view中使用强类型视图,在web.config文件中添加命名空间namespace的引用不起作用,解决方法...
  8. JS-面向对象-继承
  9. android之调用webservice实现图片上传
  10. POJ1270 Following Orders(拓扑排序+回溯)
  11. MySQL图形化界面安装步骤
  12. Ubuntu Vmware虚拟机网络配置(一)
  13. 3DCAT云流送技术如何搅动各大行业
  14. 电子书PDF文件的压缩实践
  15. 团体项目搜查令更新一
  16. 【人脸识别6】用haar+adaboost训练自己的人脸检测器
  17. API网关,网关平台API流量统一入口
  18. 【CSDN软件工程师能力认证学习精选】不用框架,python实现卷积神经网络
  19. HOJ题目分类//放这儿没事刷刷学算法!嘻嘻!
  20. html调用wrl,html 的 ContentType 小结

热门文章

  1. linux下编译isl,CentOS 6 编译GCC 4.8.1简明流程
  2. 汽车电子MCU开发之路
  3. 论文阅读:FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks
  4. Linux系统InfluxDB数据和日志目录迁移教程
  5. mysql 8.0双主_MySQL —— 配置多主一从 ( 8.0.18 版本 )
  6. 这也太香了吧!阿里甩出2021最新秒杀系统设计实录!全新演绎!
  7. 通过FinalShell连接AWS的EC2服务器
  8. 企业为什么使用企业邮箱?为什么用腾讯企业邮箱?
  9. 通用连挖苹果工程师只为云计算
  10. 机器学习中VC界和VC维草稿笔记