具体实现看代码:
一维数组
#include<stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *p = a;
for(int i=0;i<5;i++)
{
//p指向的是数组a的首地址,p+i取得数组a下一个元素的地址,*(p+i)取得元素
printf("%d",*(p+i));
//p指向的就是a的首地址,所以可以用a替换
printf("%d",*(a+i));
//数组用下标输出元素的方法
printf("%d",a[i]);
printf("%d\n",p[i]);
}
return 0;
}
运行结果如图所示:
二维数组
#include<stdio.h>
int main()
{
int a[3][5] = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
int (*p)[5]= a;//注意这里p指向的是a的行首地址
for(int i=0;i<3;i++)
{
for(int j=0;j<5;j++)
{
//p指向的是a的行首地址,p+i取得第i行地址,*(p+i)取得本行数组名,*(p+i)+j取得第i行的j列的地址,*(*(p+i)+j)取得第i行第j列的元素
printf("%d",*(*(p+i)+j));
//由一维数组输出元素的方式可知如下写法
printf("%d",(*(p+i))[j]); //用(*(p+i))取得第i行的地址,相当于a[i],(*(p+i))[j]相当于a[i][j]
printf("%d",*(p[i]+j));//用p[i]替换了*(p+i)
//数组用下标输出元素的方,与一维数组用法一致
printf("%d",a[i][j]);
printf("%d\n",p[i][j]);
}
}
return 0;
}
运行结果如图所示: