定义二维数组:
a[3][4];意思就是有3个一维数组,每个一维数组有四个字符;相当于三行四列。
//注意这里用的是从第0行开始,对应数组的下标
二维数组的a[0]代表的是第0行的一维数组,a[1]代表的是第1行的一维数组...
a[0][1],第0行,第1列的数据,a[1][2]第1行,第2列的数据
//二维数组的类型
例如int a[3][4]的数组类型就是:int [3][4]
sizeof(a) = sizeof(int [3][4])
1 #include <stdio.h>
2 int main ()
3 {
4 int a[4][5];
5
6 //存放的是整个数组的大小,就是整个数组占据多少字节
7 int num;
8 num = sizeof(a);
9 printf("num = %d\n",num);
10
11 num = sizeof(int [4][5]);
12 printf("num = %d\n",num); //int [4][5]是二位数组的类型
13
14 //求二维数组总共有多少个元素以及行数和列数
15 int cnt, line, cline;
16 cnt = sizeof(a)/sizeof(a[0][0]);
17 printf("cnt = %d\n",cnt); // 80/4 = 20 总的元素的个数,
18
19 line = sizeof(a)/sizeof(a[0]); //总的大小除以每行的大小,就是多少行
20 printf("line = %d\n",line);
21
22 cline = sizeof(a[0])/sizeof(a[0][0]); //一行的大小除以每个元素的大小,就是多少列
23 printf("cline = %d\n", cline);
24
25 //填充数组
26 int i,j;
27 for(i=0; i<4; i++)
28 for(j=0; j<5; j++)
29 a[i][j] = rand()%99; //0-98随机数
30
31 //遍历数组
32 for(i=0; i<4; i++)
33 {
34 for(j=0; j<5; j++)
35 {
36 printf("a[%d][%d] = %d ",i,j,a[i][j]);
37 }
38 printf("\n");
39 }
40
41 int (*p)[5]; //这是一个指针,而且是数组指针,这个数组里面含有5个元素,数组的类型为int [5]
42 p = a;
43 /*
44 像p+1的话,这样的就是指向第一行的数组,得到的是第一行的首地址,移动的字节 数是20个字节
45 */
46 printf("%d\n", sizeof(*(p+1))); //移动一行,每行5个元素,是int类型,所以是20个字节
47
48 //利用指针得到每个具体元素的值,例如第二行第三个数的值的大小(是从第0行第0列开始的)
49 int data = *(*(p+2)+3); //得到的就是a[2][3] 大小
50 printf("data = %2d\n",data);
51
52 }