C++ 指针数组 和 指向数组的指针

来源:互联网 发布:lol外服盒子 mac版 编辑:程序博客网 时间:2024/06/18 01:21

 

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,即指向数组的指针

还要注意的是他们用法的区别,下面举例说明。

int* a[4]     指针数组     

                 表示:数组a中的元素都为int型指针    

                 元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*

int (*a)[4]   数组指针     

                 表示:指向数组a的指针

                 元素表示:(*a)[i] 

int c[2][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } };
int *a[2]; //指针数组
int (*b)[4]; //数组指针
b = c;
cout << (*b)[1] << endl; //2
cout << *(*(b+1) +1)<< endl; //6
//将数组c中元素赋给数组a
for (int i = 0; i<2; i++)
{
a[i] = c[i];
}
//输出看下结果
cout << *a[1] << endl; //5
cout << *(a[1] + 1) << endl;//6
cout << *(a[1] + 3) << endl;//8
return 0;

二维数组作为函数参数时,函数名被视为地址,此时形参是一个指针。

 例如:

int data [3][4]={ {1,2,3,4},{2,3,4,5}, {3,4,5,6}};

int total=sum (data, 3) ;


data 是一个数组名, 该数组有三个元素, 每个元素本身是一个由4个int 值组成的数组。 因此data 的类型是指向由4个int组成的数组的指针。

  sum 函数的原型是:

int sum(  int   ( * array )  [4],   int size)  等价于   int sum( int array[] [4] ,int size)//array  是指针

int (* array) [4] : 声明一个指向由4个int 组成的数组的指针。 该指针指向一个数组,数组的 每个元素是的类型是 int [4],    array 即指向数组的指针。

此时将array看成一个二维数组的名称。

array[r][c]= * (* (array+r) +c) 

array                         //指向 array of 4 int 的第一行的指针

array +r                     //指向 array of 4 int 的第 r 行的指针 

*(array+r)                  // 指向第r 行第 0列的元素的指针, array of 4 int 的第r行,即 一个数组的名字。即第r行的第一个元素的地址。 =array[r]

*(array+r) +c            //指向第r 行第 c列的元素的指针 

* (* (array+r) +c)    //  第r行第c列的元素的值 ==array[r][c]== (*array) [c]

不能声明为 

int * array[4]://array 是数组

声明一个由4个指向int 的指针组成的数组。该数组由4个元素构成, 元素的类型是int *,  即指针数组。



0 0
原创粉丝点击