C++ C++;指针数组

C++ C++;指针数组,c++,arrays,pointers,C++,Arrays,Pointers,我有一个关于指针数组的基本问题 int *Arr[8]; // An array of int pointers int (*Arr)[8]; // A pointer pointing to an int array 如果使用第二个,如何为数组分配整数?我知道你是不是在垃圾堆上 int *Arr = new int[8] 我只能做Arr[5]=99。 在木桩上我该怎么做 非常感谢你的帮助 > P>因为使用C++,有什么理由,比如 STD::ARDUCTO/< >不适用?例如: std::

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

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

int (*Arr)[8]; // A pointer pointing to an int array
如果使用第二个,如何为数组分配整数?我知道你是不是在垃圾堆上

int *Arr = new int[8]
我只能做
Arr[5]=99
。 在木桩上我该怎么做


非常感谢你的帮助

> P>因为使用C++,有什么理由,比如<代码> STD::ARDUCTO/< >不适用?例如:

std::array<int, 8> arr;
std::array<int, 8>* arr_p = &arr;

您拥有的代码是正确的,但考虑到标准库可用,大多数人可能会建议使用容器和算法,而不是自己手动管理内存,这很容易出现错误和内存泄漏,特别是在涉及异常的情况下。

鉴于此声明:

int (*Arr)[8];
您可以为其分配大小为8的
int
数组的地址:

int data[8];
Arr = &data;
您可以通过
Arr
修改
数据

(*Arr)[i] = value;
注意
*Arr
周围的括号。在对其应用索引之前,它们需要取消对
Arr
的引用,因为索引
[]
运算符具有更高的优先级

这里需要了解的一件重要事情是,
数据
不是动态分配的。如果在它超出范围后仍保留其地址,则会得到一个悬空指针(指向不再存在的对象的指针)

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

int (*Arr)[8] = reinterpret_cast<int(*)[8]>(new int[8]);
当然,您可以使用,完全避免手动内存管理:

std::vector<int> Arr;
std::向量Arr;

它为您提供了一个可以根据需要自行生长的阵列。

我想您指的是stack?@Borgeader或steak,可能是?@NikosC。是的<代码>*的优先级低于
[]
,不是吗。@H2CO3在发布代码之前,我应该先了解一下编译代码的习惯…:-P你没事,当然,我们需要帕伦夫妇。@NikosC。是的,不用担心。这是如此普遍,以至于它立刻吸引了我的眼球。每当我看到
*arr[idx]
,我总是问:“这不是
(*arr[idx]
)吗?”@Nikos.C非常感谢。是否在堆上,分配步骤int data[8];Arr=&data;是由编者完成的吗?@GrijeshChauhan,谢谢。更正语法并使用
重新解释\u cast
int* Arr = new int[8];
std::vector<int> Arr;