在堆中混淆指针和双指针

时间:2015-03-17 02:52:31

标签: c++

我对指针和双指针感到困惑。

假设我们有这些

int* ptr = new int[2];

这里,ptr在堆中有一个大小为2的数组的地址,它保持int数据正确吗?

int** ptr = new int* [2];

这里,ptr在堆中有两个指针地址,这两个指针可以指向一些int数据。

我的想法是否正确?

2 个答案:

答案 0 :(得分:1)

这几乎是正确的:在第一种情况下,您指定一个指向堆中内存块的指针,足以存储两个int,这可以被认为是一个大小为2的int数组。 / p>

第二个ptr被分配了一个指向堆中内存块的指针,足以存储两个指向int的指针。但是,在为它们分配一些值 * 之前,这些指针并没有特别指向任何内容,就像分配其他指针一样。例如,您可以使第二个ptr生成两个int数组的数组,如下所示:

int** ptr = new int* [2];
ptr[0] = new int[2];
ptr[1] = new int[2];

* 您的第一个代码段中的int也是如此:在您分配它们之前,它们的值是不确定的。

答案 1 :(得分:0)

int* ptr = new int[2];
     

这里,ptr在堆中有一个大小为2的数组的地址,可以使int数据保持正确吗?

int** ptr = new int* [2];
     

这里,ptr在堆中有两个指针的地址,这两个指针可以指向一些int数据。

是的,但只是为了澄清,ptr保存堆分配的两个int*值数组的地址,然后这两个指针指向存储在内存中其他地方的int数据