指针数组和数组指针

转载 2008年07月02日 23:36:00
指针数组和数组指针
点击数:2670    发布日期:2006-8-23 1:00:00   【收藏】 【评论】 【打印】 【编程爱好者论坛】 【关闭】
 

这个问题大家应该都碰到过,指针数组和数组指针,刚开始看时觉得还是能看懂,但是过些时又搞混了,最后发现还是没有真正理解。

下面就简单说说这两个概念: 一:指针数组,顾名思义,就是说的首先是一个数组吧,然后数组的元素是指针而已。 说明形式为: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}};大家可以想想为什么。 当然他们也可以动态赋值,由于篇幅就不探讨了。

引用地址:http://blog.programfan.com/trackback.asp?id=17787

指针数组与数组指针详解

指针数组与数组指针详解1.什么是指针数组和数组指针? 指针数组:指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系...
  • men_wen
  • men_wen
  • 2016年09月28日 21:21
  • 13118

数组指针和指针数组

1、数组指针(指向数组的指针) (1)数组在内存中的表示 创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的内存空间...
  • Touch_2011
  • Touch_2011
  • 2011年11月13日 22:42
  • 44570

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

数组指针和指针数组的区别中国的文字博大精深,不仔细研读,很容易理解错误,就拿这个数组指针和指针数组来说吧,刚开始接触很容易弄混 那么到底什么是数组指针?什么是指针数组?他们之间又有什么区别?* 指...
  • qq_30137611
  • qq_30137611
  • 2016年10月01日 00:25
  • 912

指针数组和数组指针(C)

//注意指针数组和数组指针分别是如何指向二维数组的#include main(){    static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};/* 定义二维数...
  • bydxyj
  • bydxyj
  • 2008年02月20日 17:17
  • 18863

从运算符优先级看指针数组和数组指针

简单介绍 C/C++中的这两种书写方法实在是很像,但是它们的含义有很大的不同,所以一定要能清晰地辨别它们。 简单地说,int *p[4]是指针数组,int(*p)[4]是指向数组的指针 指针数组...
  • qq_16836151
  • qq_16836151
  • 2016年05月11日 16:19
  • 525

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

变量类型判断:变量和哪个关键字先结合,该变量就是什么类型。  例如 (1)int (*p)[n];   //p先和*结合,故是一个数组指针 ,即指针指向一个数组 (2) int *p...
  • kulala082
  • kulala082
  • 2016年11月30日 14:35
  • 1398

面试题之数组指针和指针数组的区别

1、数组指针(指向数组的指针) (1)数组在内存中的表示 创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的...
  • sum_TW
  • sum_TW
  • 2016年12月09日 16:28
  • 4394

指针数组和数组指针的使用

指针数组:指针的数组,表示一个数组,并且数组的每一个元素都是指针类型。 数组指针:数组的指针,表示一个指针,并且是指向数组的指针。 不运行程序,问下面代码的输出是什么? 1#includ...
  • zhuimengzh
  • zhuimengzh
  • 2011年09月10日 14:59
  • 15347

指针数组、数组指针、二维数组动态分配内存

C 二维数组动态分配和释放 已知第二维 char (*a)[N];//指向数组的指针 a = (char ()[N])malloc(sizeof(char ) * m); printf(“%d\...
  • tianwei11
  • tianwei11
  • 2016年03月22日 22:59
  • 2877

二维数组和指针

二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整...
  • iu_81
  • iu_81
  • 2007年09月12日 19:45
  • 61611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指针数组和数组指针
举报原因:
原因补充:

(最多只允许输入30个字)