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

KJP*_*KJP 2 c++ variables pointers

当你声明时,我想知道内存中发生了什么:

int **array;
Run Code Online (Sandbox Code Playgroud)

Ida*_*n K 8

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


JCa*_*sso 7

如果我没有记错的话...

你有一个多维数组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

}
Run Code Online (Sandbox Code Playgroud)

  • 投票赞成,因为答案是正确的。仅仅因为它不是 * 完全 * 提问者想要的并不使它值得解雇。 (2认同)

sth*_*sth 6

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