【问题标题】:what does the dereference symbol do to an array of pointers取消引用符号对指针数组有什么作用
【发布时间】:2016-08-09 20:12:55
【问题描述】:
int cols = 2;

    int *p[2];

    *p = new int[cols];

    *(p+1) = new int[cols];

我有这个非常简单的代码,但是我不明白为什么 *p = new int[cols]; 中需要 * 通常在声明一维数组时它只是 p=new int[cols];But in a 2d array you need the * what is it doing??当我 cout<< *p 时我得到 cccccc 这是什么意思?

【问题讨论】:

    标签: c++ arrays pointers multidimensional-array dynamic


    【解决方案1】:

    代码写得很糟糕。这样写可能会更清楚:

    using Thing = int *;
    
    Thing make_thing(int n) {  return new int[n]; }
    
    // ...
    
    Thing p[2];
    p[0] = make_thing(cols);
    p[1] = make_thing(cols);
    

    有一条通用的语言规则说A[B]*(A + B) 相同,因此这两个代码sn-ps 表示相同的意思。

    【讨论】:

    • 它是声明动态数组的标准语法我只是不确定为什么您需要二维数组的额外取消引用符号以及指针数组如何准确工作
    • @lolsharp:我认为答案中的最后一句话解决了这个问题。请注意,我的代码使用取消引用符号,它与您的代码相同。
    • 不,我知道 A[B] 与 *(A + B) 相同,我的问题是为什么要声明这样的二维动态数组 int *p[2]; *p = new int[cols];但是像这样的一维数组 p=new int[cols];
    • 它不是“二维动态数组”。它是 (2) 个指针 (Things) 的一维静态数组,每个指针指向动态一维数组的第一个元素。
    猜你喜欢
    • 2019-10-10
    • 2014-05-09
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2012-03-25
    • 2021-12-23
    相关资源
    最近更新 更多