zoukankan      html  css  js  c++  java
  • C 语言中的数组类型和数组指针类型. Anthony

    #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];

    也是个练习吧.
    */

  • 相关阅读:
    jQuery源码 support
    jQuery 源码: 延迟对象补充。
    web FG interview all
    Img load
    浅谈js中this指向问题
    浅谈ES6原生Promise
    BootStrap的两种模态框方式
    让div盒子相对父盒子垂直居中的几种方法
    normalize与reset
    JS实现继承的方式
  • 原文地址:https://www.cnblogs.com/ahuangliang/p/5309293.html
Copyright © 2011-2022 走看看