2D semmi-dynamic array奇怪的语法之谜

时间:2018-01-07 22:58:38

标签: c++

我不太清楚究竟是什么。我在网上搜索并堆叠,我想要一个明确的解释。

const size_t rows = 3;    //row size can be dynamic (runtime det)
const size_t cols = 3;
int (*data)[cols] = new int[rows][cols]{{1,2,3,},{4,5,6},{7,8,9}};

您可以像2D数组一样访问它:

data[i][j]

但你必须把它传递给一个函数:

void func(int (*data)[3], const size_t rows)

void func(int data[][3], const size_t rows)

但不是

void func(int **data, const size_t rows, const size_t cols)

所以你会认为它是一个2D数组。它的单元格地址是连续的。

但是......当你删除它时,你会删除它:

delete[] data;

for(size_t r=0; r<rows; r++)
    delete[] data[r];
delete[] data;

此删除意味着它不是2D数组。因为我们只删了一行。如果您尝试使用for循环删除,则会崩溃。

我希望有人可以了解这究竟是什么。语法很奇怪。

特别是,我不清楚(* data)语法。这究竟是什么? (*数据)不等于*数据。也就是说,*数据由于某种原因不起作用。

0 个答案:

没有答案