C++指针数组

New*_*ave 2 c++ arrays pointers

我只是有一个关于指针数组的基本问题.

int *Arr[8]; // An array of int pointers

int (*Arr)[8]; // A pointer pointing to an int array
Run Code Online (Sandbox Code Playgroud)

如果我使用第二个,如何将整数分配给数组?我知道是不是在堆里

int *Arr = new int[8]
Run Code Online (Sandbox Code Playgroud)

我可以做Arr[5] = 99.如何在赌注上这样做?

非常感谢您的帮助.

Nik*_* C. 7

鉴于此声明:

int (*Arr)[8];
Run Code Online (Sandbox Code Playgroud)

你可以为它分配一个int大小为8 的数组的地址:

int data[8];
Arr = &data;
Run Code Online (Sandbox Code Playgroud)

您可以修改data通过Arr:

(*Arr)[i] = value;
Run Code Online (Sandbox Code Playgroud)

注意括号周围*Arr.Arr 将索引应用于索引之前,需要取消引用它们,因为索引[]运算符具有更高的优先级.

这里要理解的一件重要事情data是不动态分配.如果你在超出范围后保持其地址,你将获得一个悬空指针(一个指向不再存在的东西的指针).

要动态分配数组并将其分配给Arr,可以对结果使用类型转换new,如下所示:

int (*Arr)[8] = reinterpret_cast<int(*)[8]>(new int[8]);
Run Code Online (Sandbox Code Playgroud)

(可以在ideone上找到一个工作示例.)

当然,以这种迂回的方式做这件事并没有多大意义,因为你可以改为:

int* Arr = new int[8];
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用std :: vector来完全避免手动内存管理:

std::vector<int> Arr;
Run Code Online (Sandbox Code Playgroud)

它为您提供了一个根据需要自行增长的数组.

  • @NikosC.它是.`*`的优先级低于`[]`,不是. (2认同)