C语言之二维数组的奥妙

Posted on 2024-01-30 18:56  牛man  阅读(5)  评论(0编辑  收藏  举报

二维数组是什么

二维数组是一个数组,数组的元素是数组

type  arr[N] = { arr[M] };

上图等价于type arr[N][M] N行M列数组,N和M都为整形常量

 

二维数组的存储方法

如图是一个两行两列的二维数组,比如int a[2][2],在内存中是如何存储的采用的是蛇形的方法

 

二维数组的使用

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     int *ptr; //指针
 5 //    int (*ptr)[2];
 6     int torf[2][2] = {12,14,16}; //torf 表示含有两个int元素的数组的首地址,torf[0]表示含有一个int元素的数组的首地址
 7 //    int torf[2][2] = {{12},{14,16}};
 8     ptr = torf[0]; //指针指向一维数组
 9     printf("*ptr = %10d, *(ptr+1) = %10d, *(ptr+2) = %10d\n",*ptr, *(ptr+1), *(ptr+2));
10     printf("ptr  = %10p, (ptr+1)  = %10p, (ptr+2)  = %10p\n",ptr, (ptr+1)  ,  (ptr+2));
11     printf("torf = %10p, (torf+1) = %10p, (torf+2) = %10p, &torf[0] = %10p, &torf[1] = %10p, &torf[2] = %10p\n",torf, (torf+1),(torf+2),  \
12     &torf[0], &torf[1], &torf[2]);
13     printf("&torf[0][0] = %10p, &torf[0][1] = %10p, &torf[1][0] = %10p, &torf[1][1] = %10p, &torf[2][0] = %10p\n",&torf[0][0], &torf[0][1], \
14     &torf[1][0], &torf[1][1],&torf[2][0]);
15     printf("torf[0][0]  = %10d, torf[0][1]  = %10d, torf[1][0]  = %10d, torf[1][1] = %10d, torf[2][0] = %10d\n",torf[0][0], torf[0][1],\
16     torf[1][0], torf[1][1],torf[2][0]);
17 
18     return 0;
19  } 

*ptr = 12, *(ptr+1) = 14, *(ptr+2) = 16
ptr = 000000000062FE30, (ptr+1) = 000000000062FE34, (ptr+2) = 000000000062FE38
torf = 000000000062FE30, (torf+1) = 000000000062FE38, (torf+2) = 000000000062FE40, &torf[0] = 000000000062FE30, &torf[1] = 000000000062FE38, &torf[2] = 000000000062FE40
&torf[0][0] = 000000000062FE30, &torf[0][1] = 000000000062FE34, &torf[1][0] = 000000000062FE38, &torf[1][1] = 000000000062FE3C, &torf[2][0] = 000000000062FE40
torf[0][0] = 12, torf[0][1] = 14, torf[1][0] = 16, torf[1][1] = 0, torf[2][0] = 0

如何用指针表示二维数组

数组指针指向多维数组的指针——》表示多维数组,int arr[2][2]; int (*p_two)[2] = arr

指针指向一维数组的首地址——》表示一维数组,int arr[2] ; int *p_one = arr;