1 指针数组
指针数组,顾名思义,主语为数组,表示存放指针(地址)的数组。
如以下代码:
int a=10;int b = 20;int c = 30; //定义三个变量
int* arr[3] = {&a;&b;&c};//定义指针数组
int i = 0;
for(i=0;i<3;i++)
{
printf("%d ",*(arr[i]));//打印数组元素
}
同理,若将几个数组的地址一起存在一个指针数组里面,也可以采用上述代码格式。
比如,定义了三个数组int arr1[5], int arr2[5],int arr3[5],则可则可以定义指针数组int* parr[3] = {arr1,arr2,arr3}。
这里arr1表示arr1[5]数组的首元素的地址,它区别于&arr1(表示整个数组的地址),虽然两者打印的值相同,但意义不一样。
与上一段代码同样的元素打印思路,可以通过这个数组指针打印出来一个二维数组。
2 数组指针
数组指针,表示指向数组变量的指针。
例如,int (*p)[5]=&arr,就是一个数组指针。
理解为:p与*结合,p为一个指针变量,它指向一个大小为5的整型数组。
数组指针一般用在二维数组中。
例如:
void print_arr(int (*arr)[3],int row,int col)
{
int i=o;
for(i=0;i{1,2,3},{4,5,6}};
print_arr(arr,2,3);
return 0;
}
值得注意的是,此处,arr[i]=*(arr+i);arr[i][j]=*(arr+i)[j]=*(*(arr+i)+j)。
因此,代码中*(*(arr+i)+j)可以改写为arr[i][j],输出结果相同。



