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

简单来说:

数组指针–>;指向数组的指针

指针数组–>;存放指针的数组

数组指针

1
2
3
int matrix[3][10];
int *mp = matrix; //错误的声明
int (*p)[10] = matrix; //正确的声明

声明一个指向多维数组的指针时,需要注意,二维及以上的数组长度需要声明出来,因为在执行下标引用时需要知道数组的长度,然后对下标乘以某个数(比如int型的×4)。如果声明的时候没有数组长度比如 int (*p)[] = matrix; ,编译器会把这个数组指针根据空数组调整(也就是同零相乘)。

指针数组

1
2
3
4
int main(int argc, char const *argv[]) {
/* code */
return 0;
}

main函数的参数就是一个常见的指针数组的例子了,在数组中存放指针,也可以是字符串数组。

区别

指针数组和数组指针能做的事都差不多。数组指针占用空间的方式事矩阵,虽然效率低,但是不需要任何指针;指针数组占用的空间则只是每个指针本身的长度。

需要存放长短不一的字符串的时候,指针数组的效率就会比数组指针的效率高很多了。