C 语言中的数组类型和数组指针类型.

#include <iostream>
using namespace std;

int main()
{
    //等长的二维数组:
    int aInt2dArrayOnStack[2][8];
    int* pIntArray = aInt2dArrayOnStack[0];//int * == int [];
    int (*pInt2dArray)[8] = aInt2dArrayOnStack; // int (*)[8] == int [][8]

    //有了上面的经验,以下部分就可以理解了.
    int (*pInt2d)[8] = new int[2][8];
    int* pInt = *pInt2d; // *pInt2d = int[8]
    int aInt = **pInt2d; // **pInt2d = int[0][0]

    //以下就当练习了
    cout << sizeof(aInt2dArrayOnStack) << endl;
    cout << sizeof(pInt2d) << endl;
    cout << sizeof(*pInt2d) << endl;
    cout << sizeof(pInt2d[0]) << endl;
    cout << sizeof(**pInt2d) << endl;

    return 0;
}

/*
这里的关键大概是类型吧:
谁知道以下类型有什么区别吗?
int
int *
int []
int (*)[]
int *[]
int **
int [][]

指针类型有:
int *
int []
int (*)[]
int **

其长度都为4, 可以自动转换的是int * 和int [].
因为数组具有指针的本质.

可以强制转换的是int* <=> int (*)[]和int [] <=> int (*)[]
因为二维数组本质上是一维的.

int **是指针的指针, 它与上面的类型完全不相等.


数组类型有:
int []
int *[]
int [][]

都是数组,长度与它的元素数有关.假设类型为:
int [N]
int *[N]
int [N][N]

那么int [N]和int *[N]的长度为 4*N以外, 它们都是一维数组,前者是一维int数组,后者是一维int*的数组.
而int [N][N] 为 N*N*4, 它是二维数组.

指向二维数组的指针如何定义呢?
是int (*)[N][N] 还是int (*)[N];

也是个练习吧.
*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值