嵌入式-C语言基础:二维数组

二维数组的每个元素都是一个一维数组,例如int arr[2][3]={{1,2,3},{4,5,6}};

下面通过几个例子来对二维数组进行深入了解:二维数组可以看作是一个父数组,他的每个元素都是一个一维的子数组。

(1)数组名表示数组首元素的地址,那么arr表示的是谁的地址?arr表示的是ar首元素的地址,也就是arr[0]的地址,同样arr[0],arr[1]也是两个子元素一维数组的数组名,可以分别用数组名a,b来代替,那么arr[0][0]表示a[0],ar[1][0]表示b[0],所以a(arr[0]),b(arr[1])作为数组名f分别也是a[0]和b[0]的地址,也就是arr[0][0]和arr[0][1]的地址:

#include<stdio.h>

int main()
{
    int arr[2][3]={{1,2,3},{4,5,6}};
    printf("arr表示的是arr的首元素地址:%p\n",arr);
    printf("*(arr+0)表示的是arr的首元素地址:%p\n",*(arr+0));//arr表示的是arr的首元素arr[0]的地址,那么*(arr+0)表示的就是arr[0],arr[0]表示arr[0][0]的地址
    printf("&arr[0][0]表示的是arr[0][0]的首元素地址:%p\n",&arr[0][0]);
    printf("&arr[0]表示的是arr的首元素地址:%p\n",&arr[0]);
    printf("arr[0]表示的是arr[0]这个子一维数组的首元素地址:%p\n",arr[0]);
    
    
    printf("arr[1]表示的是arr[1]这个子一维数组arr[1]的首元素地址:%p\n",arr[1]);
    printf("&arr[1][0]表示的是arr[1]这个子一维数组arr[1]的首元素地址:%p\n",&arr[1][0]);
    printf("arr[1]表示的是arr[1]这个子一维数组arr[1]的首元素地址:%p\n",arr[1]);
    printf("*(arr+1)+0表示的是arr[1]这个子一维数组arr[1]的首元素地址:%p,偏移1后:%p\n\n",*(arr+1)+0,*(arr+1)+1);//偏移到arr[1]下一个元素的地址
    
    return 0;
}

 

输出结果

arr表示的是arr的首元素地址:000000000061FE00
*(arr+0)表示的是arr的首元素地址:000000000061FE00
&arr[0][0]表示的是arr[0][0]的首元素地址:000000000061FE00
&arr[0]表示的是arr的首元素地址:000000000061FE00
arr[0]表示的是arr[0]这个子一维数组的首元素地址:000000000061FE00


arr[1]表示的是arr[1]这个子一维数组arr[1]的首元素地址:000000000061FE0C
&arr[1][0]表示的是arr[1]这个子一维数组arr[1]的首元素地址:000000000061FE0C
arr[1]表示的是arr[1]这个子一维数组arr[1]的首元素地址:000000000061FE0C
*(arr+1)+0表示的是arr[1]这个子一维数组arr[1]的首元素地址:000000000061FE0C,偏移1后:000000000061FE10    

 总结:*(p+i)+j和a[i][j]是等价的,数组名可以当作指针来用,表示地址

二维数组地址写法:

二维数组a的有关指针:

表示形式                                含义                                                                           地址

a                                            二维数组名,指向一维数组a[0],即0行首地址             2000

a[0] ,*(a+0),*a                     0行0列元素地址                                                          2000

a+1,&a[1]                              1行首地址                                                                   2016

a[1],*(a+1)                             1行0列元素a[1][0]的地址                                            2016

a[1]+2,*(a+1)+2,&a[1][2]       1行2列元素a[1][2]的地址                                            2024

*(a[1]+2),*(*(a+1)+2),a[1][2]  1行2列元素a[1][2]的值                                             

 

posted @ 2022-10-25 23:24  WellMandala  阅读(120)  评论(0编辑  收藏  举报