那是一个动态分配的三维整数数组吗?
不是。
int**** m_ppppCoder
m_ppppCoder
是一个指向指向指向指向整数的指针。
m_ppppCoder = new int * **[10];
m_ppppCoder
指向一个动态分配的数组的第一个元素,该数组有10个指向指向整数的指针的指针。
有人能解释一下它是如何工作的吗?
好的,它是一个指向数组元素的指针,因此本身并没有做太多工作。以下是使用示例:
int i = 42;
int *ii = &i;
int **iii = ⅈ
m_ppppCoder[0] = &iii;
int j = ****m_ppppCoder[0];
delete[] m_ppppCoder;
一个 int****
可能没有实际的好用之处。
m_ppppCoder = new int ***[10];
m_ppppCoder[0] = new int **[10];
m_ppppCoder[0][0] = new int *[10];
m_ppppCoder[0][0][0] = new int[10];
In this case, the actual data how are arranged (allocated) inside the memory ie sequentially ?
就像这样:
pointer to int*** p
|
an array of 10 int*** |->[0][1][2][3]...
|
an array of 10 int** |->[0][1][2][3]...
|
an array of 10 int* |-> [0][1][2][3]...
|
an array of 10 int |-> [0][1][2][3]...
这很简单。你已经分配了4个数组。由于它们是独立的分配,因此这4个数组互相独立,都在自由存储器中。
一个数组中的元素本身在内存中是连续的。因此,与同一数组的其他元素相关的每个指针(或者在最后一个元素情况下是整数)在内存中也是连续的。
请注意,对于所有的x在[1,10)范围内,m_ppppCoder[x]、m_ppppCoder [0][x]和m_ppppCoder[0][0][x] 都是未初始化的指针。
int***
。这可能是某个多维数组的开始,但目前它只是一个指针数组。 - Pete Becker(v[-1][0][1]+v[1][0][-1])/2
这样的表达式。然而,我已经很长时间没有这样做了,当时是在没有缓存的嵌入式应用程序上。如果在现在编写这样的代码,那将是疯狂和低效的。 - doug