数组类型,及其数组指针
一切都在代码中讲解了,有不明白的地方留言。或者自行根据运行结果分析。I trust you!
//数组类型
void main()
{
//声明一个数组类型
typedef int(Myarrray5)[5];
//1.用刚才声明的类型就可以定义一个变量,如下:
Myarrray5 a;//其实就是int a[5]
//接下来让Ty给它赋值
for (int i = 0; i < 5;i++)
{
a[i] = 11 + i;
}
for (int i = 0; i < 5;i++)
{
printf("%d ",a[i]);
}
printf("\n---------------------\n");
//2.需要注意的是:
//a代表数组首元素的地址,不是整个数组的地址
//&a表示整个数组的地址 &a a代表的数据类型不一样
//&a 数组类型 int[10]
//a 数组首元素的类型
printf("a:%d\n", a);
printf("a+1:%d\n", a+1);
printf("&a:%d\n", &a);
printf("&a:%d\n", &a+1);
printf("\n---------------------\n");
//3.用数组类型声明一个指针并且赋值:
//比如:
int x = 10;
int *m_px = &x;
//那么有以下情况:
Myarrray5 *m_pa = &a;//在这里m_pa就是一个数组指针,它指向数组a。
for (int i = 0; i < 5;i++)
{
printf("%d ",(*m_pa)[i]);
}
printf("\n---------------------\n");
//4.定义一个数组指针类型
typedef int(*Parray5)[5];
Parray5 m_pa5 = &a;
for (int i = 0; i < 5; i++)
{
printf("%d ", (*m_pa)[i]);
}
printf("\n---------------------\n");
//5.直接定义一个数组指针接住一个数组
int b[] = { 20, 30, 40, 50, 60, 70 };
int(*pb)[6] = &b;
for (int i = 0; i < 6;i++)
{
printf("%d ", (*pb)[i]);
}
printf("\n---------------------\n");
printf("pb:%d\n",pb);
printf("pb+1:%d\n", pb+1);//步长为24
//6.二维数组
printf("\n---------------------\n");
int c[2][3] = { 1, 2, 3, 4, 5, 6 };
printf("c:%d\n",c);//数组首元素的地址
printf("c+1:%d\n", c+1);//步长为3*4 = 12;注意:这个和&a + 1的步长计算方式一样,所以。。。。。。
//这个和 (*p)[3]
printf("&c:%d\n", &c);//数组的地址
printf("&c+1:%d\n", &c+1);//步长为 2*3*4 = 24;
//7.那么int (*pc)[3]和c有什么联系呢
//1.c是一个常量指针,2.是一个数组指针
//其实可以如下表示:
int(*pc)[3] = c;
for (int i = 0; i < 2;i++)
{
for (int j = 0; j < 3;j++)
{
printf("%d ", *(*(pc + i) + j));
}
printf("\n");
}
printf("\n");
system("pause");
}
结果: