1_二维数组及数组指针的理解笔记

二维数组及数组指针的理解笔记

二维数组名的本质是数组指针,数组名本身就是一个指针,所以我暂且理解二维数组名相当于一个二级指针,
(数组名作为指针使用时不能做为左值 lvalue使用)

#include <stdio.h>
#include <stdlib.h>
//二维数组名是指向行的,“&二维数组名”就指向了整个二维数组。
//二维数组名[i]" 是指向i行的首元素的。“&二维数组名[i]”就指向了一行。
int main()
{
    int Array[2][5] = {
                        {0,1,2,3,4},
                        {5,6,7,8,9},
                        };

    int (*pArray)[5] = Array; //定义一个数组指针并指向二维数组
    void * pVoid = NULL;
    //Array[0] 是第0行的5个元素的首地址
    //以下结果相同
    printf("Array[0]     = 0x%p\n",Array[0]);
    printf("*Array       = 0x%p\n",*Array);
    printf("&Array[0][0] = 0x%p\n",&Array[0][0]);

    //Array[1] 是第1行的5个元素的首地址 *Array[1] = 5
    //*(Array+1) 等价于 Array[1] 相当里面存的第1行第1个元素的地址,
    //以下结果相同
    printf("Array[1]     = 0x%p\n",Array[1]);
    printf("*(Array+1)   = 0x%p\n",*(Array+1));
    printf("&Array[1][0] = 0x%p\n",&Array[1][0]);
  //*(Array+1)存的第1行第1个元素的地址,对其在进行取值操作,就相当于取出第1行第1个元素
    printf("**(Array+1)     = %d\n",**(Array+1));         //结果显示5
    printf("*Array[1]       = %d\n",*Array[1]);             //结果显示5
    printf("*(Array[1]+1)   = %d\n",*(Array[1]+1));     //结果显示6
    printf("*(*(Array+1)+2) = %d\n",*(*(Array+1)+2)); //结果显示7
    printf("*(*(pArray+1)+2)= %d\n",*(*(pArray+1)+2));//结果显示7

    system("pause");
    return 0;
}

如下图
0x0060FED0 - 0x0060FEBC = 0x14 = 20
Array和Array+1相差45 = 20个字节,一个int占4个字节
同样pArray和pArray+1亦然
4
5 = 20个字节,一个int占4个字节
同样pArray和pArray+1亦然
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Flipped--0228

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

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

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

打赏作者

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

抵扣说明:

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

余额充值