这个问题大家应该都碰到过,指针数组和数组指针,刚开始看时觉得还是能看懂,但是过些时又搞混了,最后发现还是没有真正理解。
下面就简单说说这两个概念: 一:指针数组,顾名思义,就是说的首先是一个数组吧,然后数组的元素是指针而已
。 说明形式为:type *pointer_array[constant1][constant2]...[constantn]; 例如:int *pai[3]; 由于‘*’是自右向左结合,因此从右向左看,首先看到[4]说明是一个数组,是一个包含4个元素的数组,然后看到‘*’,显然是指针类型,由此可以看出数组中存放的是指针而不是一般的类型。同理,char *pac[2][3]
是包含有6个元素,每一个元素都是一个字符型指针。再来说说他们的初始化: int *pai[3];既然是一个包含4个整形指针的数组那么其对应的将是一个二维整形数组,因为一个整形指针对应一个一维整形数组。 那我就用一个二维整形数组来初始化它,事实上一般也都是这么做的,这里有一个二维数组,int arr[3][2]={{1,2},{3,4},{5,6}},一个三行两列的整形数组,注意这里的行必须和你的指针数组的维数一致,否则是不允许的,不信你可以试试。 这个初始化有很多种选择,以下只列举常见的两中: 第一种也是很好理解的: for(int i=0;i<3;i++) pai[i]=arr[i]; 显然arr[i]是每一行的首地址,相当于一个一维数组的数组名,如是把它送给一个整形指针pai[i]是理所当然的了。
第二种方法: 在说明指针数组时就初始化:int (*ap)[2]={{1,2},{3,4},{5,6}};哈哈这个不用说了吧。
注意:不能将二维数组的数组名赋给指针数组的数组名,pai=arr(错),因为两者的类型不一致,二维数组名的类型是指向int[][]型的指针,而指针数组的的数组名是指向int *[]类型的指针。
在c/c++语言中,指针数组最常用的场合就是说明一个字符串数组。即说明一个数组,它的每个元素都是一个字符串。
二:数组指针:指向一个数组的指针。
说明形式为:type (*pointer_array)[constant1][constant2]...[constantn]; 注意这里的圆括号是必须就将这是由于方括号[],较指针说明符“*”的优先级高,若无此圆括号,编译器将把上述说明解释成成了一个数组指针。 例如:int (*ap)[2];
这样就说明了一个指向包含有2个元素的整形数组的数组指针,听起来确实有点别扭。不过仔细分析应该还是能理解的,就是说ap是一个指针,而它指向的对象是一个指针,注意不要将它和一个指向一个整形变量的指针搞混了。 同样以一个二维数组来说明其初始化问题, int arr[3][2]={{1,2},{3,4},{5,6}};注意这里的列数必须和数组指针所指的数组的列数相同。 第一种方法: ap=arr; 为什么这里能这样将二维数组名送给ap呢,你可以这样理解,二维数组不就可以看成是一维数组的数组吗,而一个数组指针它指向的内容就是一个一维数组
,那么你就可以把这个数组指针当做是一个数组名,只不过这个数组里的元素不是像int,char之类型的,而是一个数组,这样你就可以把它和二维数组的数组名联系在一起了吧。文笔不行,不知道是否说清楚了。
第二种方法: ap=&arr[0]; 这里arr[0]其实就是一维数组的数组名,将它的地址给ap是很自然的,因为ap本来就是指向一个一维数组的。 注意这里不能这样初始化:int (*a)[2]={{1,2},{3,4},{5,6}};大家可以想想为什么。 当然他们也可以动态赋值,由于篇幅就不探讨了。
分享到:
相关推荐
指针数组和数组指针的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型...
彻底理解指针,指针数组和数组指针,指针函数和函数指针.doc
指针数组和数组指针。 int* intPtrArray[5]; // 创建一个包含 5 个整数指针的指针数组 int a = 10, b = 20, c = 30, d = 40, e = 50; intPtrArray[0] = &a; // 第一个元素指向整数变量 a intPtrArray[1] = &b; // ...
指针进阶之指针数组和数组指针
指针数组和数组指针的区别
指针数组: 指针数组是一个数组,其中的每个元素都是一个指针。指针数组可以用来存储多个指向不同对象的指针。定义指针数组的方式是在类型标识符后面加上一个星号()和一个数组大小的方括号[]。例如,int ptr_array[5...
数组,指针.对于刚刚接触程序的童鞋们来说,是一个难点,也是一个重点.为了提高大家这方面的水平.这里提供一份资料.
单从字面上来看似乎很难分清它们是什么,我们先来看看指针数组和数组指针的定义。 指针数组:数组类型 *数组名[数组长度]; 例:int *parr[5]; 数组指针:类型名 (*指针名)[数组长度]; 例:int (*parr)[5]; 现在我们...
本文是针对C语言而写的指针数组和数组指针的区别,希望能给予见解
此文档详细描述了指针数组和数组指针的联系和区别,不看会遗憾的。
用于比较指针数组和数组指针实现算法的差异,利用函数返回指针实现。 可作为研究C语言指针使用的范例程序。 有源代码和实现结果图。
实验与指导-数组指针字符串 指针与数组区别
为什么会出现指针和数组指针对数组元素调用的方式不同呢? 答:*p是一个指针变量,p指向的其实是a[0]或a[0][0]; 而(*p)[2]是一个数组指针,p指向的其实是a[0],a[1]或a[0][0],a[0][1]这样的形式; 也就是说*p中的p...
用于比较指针数组和数组指针实现算法的差异,利用函数返回指针实现。 可作为研究C语言指针使用的范例程序。 有源代码和实现结果图。
指针可以用于数组、或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较严重的问题。 1、指针 程序中所有的变量和常量都存在一个内存地址中,当然,...
第9章 指针和数组——指针数组的应用:命令行参数C语言程序设计第9章 指针和数组命令行参数什么是命令行参数(Command Line Arguments)?GU
第9章 指针和数组—指针数组及其在字符串处理中的应用C语言程序设计第9章 指针和数组问题:存储一个字符串集合的最佳方式是什么?二维的字符数组问题的提出105C语
主要介绍了C++指针数组、数组指针、数组名及二维数组技巧汇总,对于深入理解C++数组与指针来说非常重要,需要的朋友可以参考下