我想知道你声明:
时内存中发生了什么int **array;
答案 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
}