指针和二维数组

  1. C语言没有真正意义上的二维数组。
    在C语言中,二维数组的实现,只是简单的通过“线性扩展”的方式进行。
    如图所示,int b[4][5]; 就是定义 4 个元素,每个元素都是一个包含 5 个整型变量的一维数组。它在内存中依然是以线性的形式存储。
    在这里插入图片描述
  2. 弄清楚下边三个问题:
    假设我们定义了二维数组 int array[4][5] 在这里插入图片描述
    • array表示的是什么?
      array表示的是一个数组指针,她的跨度是5个整型内存大小,一般是5*4
    • *(array+1)表示的是什么?
      表示的是array[1][0]的地址(指针),它的跨度是1个整型内存大小。
    • *( *(array+1)+3) 表示的是什么?
      表示的是array[1][3]的整型值。
  3. 数组指针和二维数组:
    二维数组我的理解是有三个指针,分别是一个表示二维数组的指针,一个表示一维数组跨度的指针和一个表示相应类型跨度的指针。指针套指针,只是指针指向的范围不一样。就像刻度尺一样。
#include <stdio.h>

int main()
{
        int array[2][3] = {{0, 1, 2}, {3, 4, 5}};
        int (*p)[3] = array;

        printf("**(p+1): %d\n", **(p+1));
        printf("**(array+1): %d\n", **(array+1));
        printf("array[1][0]: %d\n", array[1][0]);
        printf("*(*(p+1)+2): %d\n", *(*(p+1)+2));
        printf("*(*(array+1)+2): %d\n", *(*(array+1)+2));
        printf("array[1][2]: %d\n", array[1][2]);

        return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值