我不太清楚究竟是什么。我在网上搜索并堆叠,我想要一个明确的解释。
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)语法。这究竟是什么? (*数据)不等于*数据。也就是说,*数据由于某种原因不起作用。