一、指针访问二维数组
code:
#include <stdio.h>
int main(void)
{
int arr[3][4]={{1,3,5,7},{2,4,6,8},{3,6,9,12}};
int i, j, k=0;
//指针访问二维数组
int *p;
p=arr;//arr父数组的首地址,这里会有警告
// warning: assignment to 'int *' from incompatible pointer type 'int (*)[4]' [-Wincompatible-pointer-types]
//p=&arr[0][0];//这一句可以解决这种警告
for(i=0;i<3;i++){
for (j=0;j<4;j++){
//printf("%p ", &p[k]);//这种相当于&arr[0]
//printf("%p ", p+k);
//printf("%p ", p++);//输出的地址相同,p最后所指向的地址不同
k++;
}
putchar('\n');
}
return 0;
}
二、指针数组访问二维数组
code:
#include <stdio.h>
int main(void)
{
int arr[3][4]={{1,3,5,7},{2,4,6,8},{3,6,9,12}};
int i, j, k=0;
int (*parr)[4];//指针数组
parr=arr;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
//printf("%p ", &parr[i][j]);
//printf("%p ", parr[i]+j);
//printf("%p ", *(parr+i)+j);
//printf("%d ", *(parr[i]+j));
//printf("%d ", parr[i][j]);
//printf("%d ", *(*(parr+i)+j));
}
//printf("%p ", parr+k);//每次增加一个子数组的内存空间大小
//k++;
putchar('\n');
}
return 0;
}