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]所以分别赋值。
总结:
数组指针时一个指针变量,是一个行指针,在地址空间中占据一个指针变量的大小;指针数组是多个指针变量,在内存中占用多个指针类型数据空间大小。