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.如何在赌注上这样做?
非常感谢您的帮助.
鉴于此声明:
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)
它为您提供了一个根据需要自行增长的数组.
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |