什么(int ** array;)创建?

时间:2009-10-07 21:29:41

标签: c++ pointers variables

我想知道你声明:

时内存中发生了什么
int **array;

5 个答案:

答案 0 :(得分:8)

它创建一个变量来存储指向int指针的指针。

答案 1 :(得分:6)

编译器保留四个字节(在32位系统上,在64位上为八个字节)来存储指针(指向另一个指向int的指针)。没有进一步的内存分配,程序员可以将指针实际设置为指向存储int* / array / ...的其他内存位置。

答案 2 :(得分:4)

你正在声明一个指针变量,所以你要为一个内存地址分配足够的空间(取决于你的平台/编译器等)。

类型系统将确保您分配给它的唯一地址包含其他内存地址,并且这些地址代表整数变量的实际地址。

要使用指针到指针,可以取消引用一次(以获取实际指向整数的地址),然后再取消引用(获取实际整数)。

您可以通过明确地转换为其他内容来绕过类型系统(例如,i =& pDouble),但除非您确定知道自己在做什么,否则不建议这样做。

如果你有一个二维数组,你可以从概念上把它想象成一个表示行的一维数组的一维数组。间接的第一级是选择行,另一级是选择行中的单元格。

答案 3 :(得分:2)

它是一个指向int指针的指针。这通常用于声明一个2D数组,在这种情况下,每个int指针都是一个数组,双指针是一个数组数组。

答案 4 :(得分:2)

如果我没弄错的话......

您有一个多维数组arr[i][j]

**arr地址为arr[0][0]

*((*arr)+1)地址为arr[0][1]

*(*(arr+1)+1)地址为arr[1][1]

C ++中的示例代码

#include <iostream>

using namespace std;

int main()
{
int **arr;

arr = new int*[5];

for(int i = 0; i < 5; i++)
    arr[i] = new int[5];

arr[0][1] = 1;

cout << *((*arr)+1); // prints 1
cout << arr[0][1] = 1; // prints 1

}