#include <stdio.h>
int main(void)
{
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int i, j;
int *p = *a; // 2: int *p = &a[0][0]; 3: int *p = a[0];
int *q[3] = {a[0], a[1], a[2]};
int **b = q;
int (*c)[4] = a; // 整型一维数组指针变量
printf("*************************************01*************************************\n");
// a: 二维数组名
// a[0]: 一维数组名
// a[0][0]: 数组元素
// sizeof(a)/sizeof(a[0]): 有多少个一维数组(3)
// sizeof(a[0])/sizeof(a[0][0]): 一维数组有多少个元素(4)
for(i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
for(j=0; j<sizeof(a[0])/sizeof(a[0][0]); j++)
{
printf("%d ", a[i][j]);
}
}
printf("\n");
// sizeof(a)/sizeof(a[0][0]: 二维数组中元素个数(12)
printf("*************************************02*************************************\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *p++);
}
printf("\n");
// a++: a = a+1
printf("*************************************03*************************************\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *(*a+i));
}
printf("\n");
// 4和5是否可以倒置?
printf("*************************************04*************************************\n");
for(i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
for(j=0; j<sizeof(a[0])/sizeof(a[0][0]); j++)
{
// 第1个*: 间接访问
// 第2个*: 间接访问
printf("%d ", *(*(b+i)+j));
}
}
printf("\n");
printf("*************************************05*************************************\n");
for(i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
for(j=0; j<sizeof(a[0])/sizeof(a[0][0]); j++)
{
// *: 间接访问
printf("%d ", *q[i]++);
}
}
printf("\n");
printf("*************************************06*************************************\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
// 第1个*: 间接访问
// 第2个*: 改变偏移量
printf("%d ", *(*c+i));
}
printf("\n");
return 0;
}
6种方法遍历二维数组
最新推荐文章于 2023-07-06 15:30:41 发布