#include <stdio.h>
#include <stdlib.h>
main()
{
/*
二维数组的几个符号的测试
1、a等同于&a[0]
2、a[0]等同于&a[0][0]
3、在数值上 a、&a、a[0]、&a[0]、&a[0][0] 是相等的,但是在类型上面是有区别的。
*/
int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};
int (*p1)[5]; // 数组指针
int *p2; // 一般指针
int i,j;
p1 = a; // 等同 p1 = &a[0]; // 指向二维数组的数组名
p2 = a[0]; // 等同 p2 = &a[0][0]; // 指向二维数组的第一维数组
printf("a = %p.\n", a); // a 类型是 int (*)[5]
printf("&a = %p.\n", &a); // &a 类型是 int (*)[2][5]
printf("a[0] = %p.\n", a[0]); // a[0] 类型是 int *
printf("&a[0] = %p.\n", &a[0]); // &a[0] 类型是 int (*)[5]
printf("a[0][0] = %d.\n", a[0][0]); // a[0][0] 类型是 int
printf("&a[0][0] = %p.\n", &a[0][0]); // &a[0][0]类型是 int *
printf("a[0][2] = %d.\n", *(*(p1+0)+2)); // a[0][2] = 3
printf("a[1][2] = %d.\n", *(*(p1+1)+2)); // a[1][2] = 8
printf("a[0][2] = %d.\n", *(p2+2)); // a[0][2] = 3
printf("a[0][4] = %d.\n", *(p2+4)); // a[0][4] = 5
printf("a[1][4] = %d.\n", *(p2+9));
/*利用一般指针*p2遍历数组输出*/
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
{
printf("a[%d][%d] = %d\t",i,j,*p2++);
}
printf("\n");
}
/*利用数组指针*p1遍历数组输出*/
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
{
printf("a[%d][%d] = %d\t",i,j,*(*(p1+i)+j));
}
printf("\n");
}
system("pause"); //需包含这个头文件#include <stdlib.h>
}
二位数组与指针
最新推荐文章于 2024-12-16 15:35:58 发布