void test1() { int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; int(*p)[4]; p = (int(*)[4])a; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) printf("%d、", p[i][j]); //或者 *(*(p+i)+j) 或者 *(p[i]+j) printf("\n"); } }
数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[4]; p即为指向数组的指针,又称数组指针
输出:
1、换成如下代码输出结果改变
void test1()
{
int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
int(*p)[2];
p = (int(*)[2])a;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++) printf("%d、", p[i][j]); //或者 *(*(p+i)+j) 或者 *(p[i]+j)
printf("\n");
}
}
2、换成下面代码,跳过2个元素
3、下面代码一次跳过4个元素
可见定义(*p)[n]中n的大小,影响数组方式取值和自身地址计算。
4、下面这个代码输出和直接按数组方式使用是不一样的
原文:https://www.cnblogs.com/zhaogaojian/p/14673226.html