C++ “new int*[rowCount];”的含义是什么将内存分配给2D阵列时?2D数组是指向数组的指针数组吗?

C++ “new int*[rowCount];”的含义是什么将内存分配给2D阵列时?2D数组是指向数组的指针数组吗?,c++,arrays,pointers,C++,Arrays,Pointers,动态2D数组基本上是指向数组的指针数组 哦,我的天,这完全是垃圾,这是完全错误的。这不是二维数组。动态2D数组基本上是指向数组的指针数组不,不!T*ptr[M]=新的T[N][M];是正确的解决方案…任何数量的指针数组都不会与数组数组相同 新int*[rowCount] 那里的星星表示什么 2D数组是指向数组的指针数组吗 那里的星星表示什么 这里的语法是新类型[size]。在new int*[rowCount]中,int*是类型,即int指针 二维数组是指向数组的指针数组吗 它在动态多维数组和静

动态2D数组基本上是指向数组的指针数组

哦,我的天,这完全是垃圾,这是完全错误的。这不是二维数组。动态2D数组基本上是指向数组的指针数组不,不!T*ptr[M]=新的T[N][M];是正确的解决方案…任何数量的指针数组都不会与数组数组相同

新int*[rowCount]

那里的星星表示什么

2D数组是指向数组的指针数组吗

那里的星星表示什么

这里的语法是新类型[size]。在new int*[rowCount]中,int*是类型,即int指针

二维数组是指向数组的指针数组吗

它在动态多维数组和静态多维数组中是不同的。在静态阵列中,内存分配为一维线性阵列,并作为二维阵列访问

2D动态数组是指向类型的指针数组,在您的例子中是int。如果初始化,每个元素都指向类型的第一个元素。简单地说,它是类型的第一个元素的地址数组。在访问时,它只是将sizeoftype添加到该地址以访问所需的索引

那里的星星表示什么

这里的语法是新类型[size]。在new int*[rowCount]中,int*是类型,即int指针

二维数组是指向数组的指针数组吗

它在动态多维数组和静态多维数组中是不同的。在静态阵列中,内存分配为一维线性阵列,并作为二维阵列访问

2D动态数组是指向类型的指针数组,在您的例子中是int。如果初始化,每个元素都指向类型的第一个元素。简单地说,它是类型的第一个元素的地址数组。在访问时,它只是将sizeoftype添加到该地址以访问所需的索引。

在此表达式中

new int*[rowCount];.
分配了一个数组,其中包含int*类型的rowCount元素。也就是说,数组的每个元素都是标量对象

多维或二维数组是数组元素依次为数组的数组

因此,要分配一个二维数组,您应该编写

new int[rowCount][colCount];
typedef int TElement[colCount];

new TElement[rowCount]; .
或者你可以写

new int[rowCount][colCount];
typedef int TElement[colCount];

new TElement[rowCount]; .
这种分配的问题是,变量colCount必须是编译时常量。如果在编译时变量的值未知,则不能使用这种分配

因此,在这种情况下,通常会分配一个指针数组,如问题中所示

int **a = new int*[rowCount];.
然后,一维数组的每个元素由新分配的一维数组的地址初始化,如

for ( size_t i = 0; i < rowCount; i++ )
{
    a[i] = new int[colCount];
}
在这个表达式中

new int*[rowCount];.
分配了一个数组,其中包含int*类型的rowCount元素。也就是说,数组的每个元素都是标量对象

多维或二维数组是数组元素依次为数组的数组

因此,要分配一个二维数组,您应该编写

new int[rowCount][colCount];
typedef int TElement[colCount];

new TElement[rowCount]; .
或者你可以写

new int[rowCount][colCount];
typedef int TElement[colCount];

new TElement[rowCount]; .
这种分配的问题是,变量colCount必须是编译时常量。如果在编译时变量的值未知,则不能使用这种分配

因此,在这种情况下,通常会分配一个指针数组,如问题中所示

int **a = new int*[rowCount];.
然后,一维数组的每个元素由新分配的一维数组的地址初始化,如

for ( size_t i = 0; i < rowCount; i++ )
{
    a[i] = new int[colCount];
}
星号是所分配类型的一部分。新int*[rowCount];将行计数指针的动态数组分配给int,并返回指向第一个指针的指针

不是。2D数组是一个数组,它的元素是1D数组,即T[M][N],而指针数组的元素是。。。好吧,指针。 区别很容易发现:2D数组由单个连续内存块支持,而指针数组指向数组时,其内存不按特定顺序分散

星号是所分配类型的一部分。新int*[rowCount];将行计数指针的动态数组分配给int,并返回指向第一个指针的指针

不是。2D数组是一个数组,它的元素是1D数组,即T[M][N],而指针数组的元素是。。。好吧,指针。 区别很容易发现:2D数组由单个连续内存块支持,而指针数组指向数组时,其内存不按特定顺序分散


这个答案的前半部分完全正确,但后半部分完全错误。嘿,谢谢你。编辑它是为了防止误导任何人。我编辑它是为了防止误导,没有写其他东西,因为我认为昆汀的答案就足够了。但是给你!这个答案的前半部分完全正确,但后半部分完全错误。嘿,谢谢你。编辑它以防止m
我阅读任何人。我编辑以防止误导,并没有写其他东西,因为我认为昆汀的答案就足够了。但是给你!