数组指针和指针数组

1.数组指针

 也称作行指针。若定义数组指针 int (*p)[n],表示这是一个数组指针,是一个指针变量,可以理解为指向二维数组的行指针。n 是这个指针的步长,当执行p+1时,要跨越n个int(在这里是int)类型数据的长度。

  将二维数组赋给一个指针,如下:

int a[3][4];
int (*p)[4];  //定义数组指针,用于指向二维数组的一行,他是一个指针变量
p = a;  //将二维数组的首地址赋值给p ,也就是a[0] 或者 &a[0][0]
p++;  //该语句执行后相当于 p = p+ 1,可以使得p指向二维数组的下一行

2.指针数组

   和上者不同,若定义 int* p[n], 表示这是一个指针数组,他是多个指针变量而非一个。

如果将二维数组赋值给一个指针数组,则可以表示为:

int *p[3];
int a[3][4];
for(int i = 0; i< 3; i++)
{
     p[i] = a[i];
}

这里int* p[3]表示存储3个指针变量,分别是p[0] p[1],p[2]所以分别赋值。

总结:

数组指针时一个指针变量,是一个行指针,在地址空间中占据一个指针变量的大小;指针数组是多个指针变量,在内存中占用多个指针类型数据空间大小。

原文地址:https://www.cnblogs.com/PrayG/p/10681768.html