数组指针&&指针数组

数组指针:

  定义 int (*p)[n];      占用内存中一个指针的存储空间

  ()优先级高,首先说明p是一个指针,指向一个int型的一维数组,故名数组(的)指针。指向的一维数组的长度是n,也可以说是p的步长为n。

例:可指向二维数组,(*(p+i))[n],n为列。

如要将二维数组赋给一指针,应这样赋值:

int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
     p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
     p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

所以数组指针也称指向一维数组的指针,亦称行指针。

指针数组
  定义 int * p[n];      多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间

  []优先级高,首先说明p是一个数组,数组中元素类型是int *型指针,故名(存)指针(的)数组。p[0]、p[1]、p[2]...p[n-1]元素值都是指针变量。

如要将二维数组赋给一指针数组:

int *p[3];    //p 一维数组内存放着三个指针变量
int a[3][4];
    for(i=0;i<3;i++)
    p[i]=a[i];  //都是int *型,p[i]赋予的是二维数组第i个一维数组的首地址   n为行。

这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2],所以要分别赋值。


二维数组a[i][j]:

数组指针 int (*p)[n] (*(p+i))[j]=p[i][j]
指针数组 int * p[n] *(p[i]+j)=*(*(p+i)+j)



原文地址:https://www.cnblogs.com/hjh-666/p/11114609.html