1.二维数组
二维数组有行有列,二维数组可以看成由多个一维数组构成的,是多个一维数组的集合,可以认为二维数组的每一个元素都是一个一维数组。
#include<stdio.h>
int main()
{
int a[3][5];
printf("a=%p\n",a);
printf("a+1=%p", a + 1);
return 0;
}
由此可得a+1和a相差20个字节,大小等于int a[5]。
2.数组指针的概念
本身是个指针,指向一维数组,加1跳一个数组,指向下个数组。
3.数组指针的定义方法
指向的数组的类型 (*指针变量名)[指向的元素的个数]
int (*p) [5]; //定义了一个数组指针变量p,p指向的是整型的有5个元素的数组
p+1 往下指5个整型,跳过一个有5个整型元素的数组
#include<stdio.h>
int main()
{
int a[3][5];
int(*p)[5];
p = a;
printf("a=%p\n", a);
printf("a+1=%p\n", a+1);
printf("p=%p\n", p);
printf("p+1=%p\n", p+1);
printf("&a[0][0]=%p\n", &a[0][0]);
printf("&a[0][0]+1=%p\n", &a[0][0] + 1);
return 0;
}
4.各种数组指针的定义
(1)一维数组指针,加1指向下一个数组
int(*p)[5];
配合每行有5个int型元素的二维数组来用
int a[3][5];
int b[4][5];
p=a;
p=b;
(2)二维数组指针,加1指向下个二维数组
int (*p)[4][5];
配合三维数组来用,三维数组中由若干个4行5列的二维数组构成
int a[3][4][5];
int b[4][4][5];
p=a;
p=b;
#include<stdio.h>
int main()
{
int a[3][4][5];
printf("a=%p\n", a);
printf("a+1=%p\n", a + 1);
int(*p)[4][5];
p = a;
printf("p=%p\n", p);
printf("p+1=%p\n", p + 1);
return 0;
}
a和a+1存储位置相差80个字节。