【问题标题】:Memory diagram of dynamic allocation of Multidimensional Arrays多维数组动态分配内存图
【发布时间】:2012-10-07 06:37:07
【问题描述】:

这里有两种我知道的动态分配多维数组的方法:

int (*numbers)[4] = new int[3][4]

int **numbers = new int*[3]; 

这两个在内存中代表相同的东西吗?实际上,它们代表什么以及如何代表? (内存图真的很有帮助!)

【问题讨论】:

    标签: c++ dynamic multidimensional-array


    【解决方案1】:

    不,第一个将创建 12 个整数 (3*4),在内存中它们将按顺序排列。第二个创建 3 个指向整数的指针

    即第一个将像这样布置

    [1,2,3,4][5,6,7,8][9,10,11,12]
    

    所以你有 3 个 4 元素的整数数组,而第二个例子看起来更像

    [0x12345678,0x12345678,0x12345678]
    

    即,3个未初始化的整数指针

    【讨论】:

    • 你能解释一下“数字”代表什么吗?
    • 第一个numbers 是一个指向4 个整数数组的指针。第二个numbers 是一个指向整数的指针。
    • 指向 4 个整数数组的指针如何保存 12 个整数的地址?指向整数的指针如何保存指向整数的 3 个指针的地址?对不起,我有点困惑
    • 指针不“持有”任何东西,指针的值是某物所在的内存地址。所以在第一种情况下,numbers 的值是第一个 4 个整数数组的第一个元素的内存地址。对于第二个numbersnumbers 的值是你的 3 指针数组中第一个指针的内存地址。
    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2017-03-18
    • 2014-07-19
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多