最简单易懂的指针地址和数组名关系

一维数组

int num[10] = {1,2,3,4,5,6,7,8,9};

/*数组名是首元素地址,即整型指针,而我们知道指针加减整数代表访问权限的大小*/
num = num + 0 = &num[0]
      num + 1 = &num[1]
      num + 2 = &num[2]
      num + 3 = &num[3]
    ............

/*指针解引用就是对应地址的值*/
*(num) = *(num + 0) = num[0]
   		 *(num + 1) = num[1]
    	 *(num + 2) = num[2]
    	 *(num + 3) = num[3]
    ............


这里区分一个概念: 数组首元素地址数组地址

数组首元素地址: 即数组名arr或者&arr[0]

数组地址: 即整个数组的地址 &arr.

比如一个数组是 int arr[5] = {1,2,3,4,5};

数组首元素地址是**---->** &arr[0] 或者 arr

数组地址是 ------> &arr


二维数组

二维数组其实本质是一维数组,由每一行拼接而成.

二维数组的数组名是首元素地址,而二维数组的首元素是 第一行数组,所以说二维数组的数组名就是 第一行数组的数组地址

而arr[n] 就代表是某一行的数组名,即某一行的数组的首元素地址

比如数组arr[3][3]
那么arr[0]就是第一行数组的数组名,arr[1]就是第二行数组的数组名

int arr[3][3] = {
    {1,2,3},
    {4,5,6},
    {7,8,9}
};

他的结构就是这样:

image-20210416182630954

所以:

int arr[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
/*arr是第一行的    数组地址,   即等于该行的     数组名取地址*/
arr = arr + 0 = &arr[0]
      arr + 1 = &arr[1]
      arr + 2 = &arr[2]
      arr + 3 = &arr[3]
    ............
    
/*所以,可以知道有以下表达*/
    *(arr + 0) + 0 = *&arr[0] + 0 = arr[0] + 0 = &arr[0][0]
    *(arr + 0) + 1 = *&arr[0] + 1 = arr[0] + 1 = &arr[0][1]
    *(arr + 0) + 2 = *&arr[0] + 2 = arr[0] + 2 = &arr[0][2]
    
    *(arr + 1) + 0 = *&arr[1] + 0 = arr[1] +0 = &arr[1][0]
    *(arr + 1) + 1 = *&arr[1] + 1 = arr[1] +1 = &arr[1][1]
    *(arr + 1) + 2 = *&arr[1] + 2 = arr[1] +2 = &arr[1][2]
    ........
    
/*所以解引用arr就相当于得到某一行数组的数组名*/
*(arr) = *(arr + 0) = arr[0]
         *(arr + 1) = arr[1]
         *(arr + 2) = arr[2]
         *(arr + 3) = arr[3]
    .............
    
    
/*同理,可以知道有以下表达*/
**arr = *(*(arr + 0) + 0) = arr[0][0]
        *(*(arr + 1) + 1) = arr[1][1]
        *(*(arr + 2) + 2) = arr[2][2]
        *(*(arr + 3) + 3) = arr[3][3]
    ............
  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捕获一只小肚皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值