首先我们需要了解概念:(1)数组指针是本质是指针,它指向的数据类型是数组;(2)指针数组是数组,它的元素是指向某个数据类型的指针;
1.定义
(1)int (*p1)[5];
数组指针,(*p1)运算符*先与p结合,表面它是个指针,后与[]结合,定义为数组指针。即指向数组的指针。指针指向有5个int型元素的数组;
(2)int* p2[5]
指针数组,p2先与[]结合,表明它是个数组,后与运算符*结合,定义为指针数组。即p2是元素为指向int类型的指针数组,数组的元素个数为5;
2.应用
(1)数组指针,限定的数组的size,但是数组的个数未做限定,适合应用在已知数组的元素的size,但数量未知的场景;
(2)指针数组,限定数组的个数,但是数组的size为做限定,适合应用在已知的数组的个数,但是size未知的场景;
3.example
#include
#include
//数组指针
int(*p1)[5];
//指针数组
int* p2[5];
int attr[5][5] = { {1,2,3,4,5},{6,7,8,9,0} };
int main()
{
p1 = &attr[0];
printf("p1:0x%08x, next:0x%08xn", p1, (p1+1));
printf("attr[0]:0x%08x, attr[1]:0x%08x", attr[0], attr[1]);
printf("n");
for (int i = 0; i < 5; i++)
{
p2[i] = &attr[i][0];
printf("p2[%d]:0x%08xn", i, p2[i]);
}
return 0;
}
运行结果



