数组地址的地址

Address of address of array

本文关键字:地址 组地址 数组      更新时间:2023-10-16

如果我定义一个变量:
int (**a)[30];
它是指针。这个指针指向另一个指针,该指针指向一个包含30个整型整数的数组。
如何声明它或初始化它?

int (**a)[10] = new [10][20][30];
int (**a)[10] = && new int[10];  

都不行。

关于如何初始化a(无论这是否是您实际需要的)的问题的直接答案是

int (**a)[10] = new (int (*)[10]);

我不认为这实际上是你想要的;你可能想初始化指针指向一个实际的数组,无论哪种方式std::vector都是更好的方法。

如果你想要一个问题的答案,那么你可以这样做:

int a[30];
int (*b)[30] = &a;
int (**c)[30] = &b;

但这不太可能是你想要的,就像其他人评论的那样。你可能需要澄清你的潜在目标——否则人们只能猜测。


根据MooingDuck的评论,我实际上可以看到一种不需要typedef的方法,但不是直接:

template <typename T>
T *create(T *const &)
{
    return new T;
}
int (**a)[30] = create(a);

你希望通过写&(&var)得到什么?这相当于address of address of a block of memory。这样做只是为了满足代码中*的数量是没有意义的。

想想看——你怎么能得到一个地址的地址呢?即使你完全靠运气或奇怪的语言技巧做到了这一点,也不可能成功。