对内存中数组的引用

Reference to array in memory

本文关键字:引用 数组 内存      更新时间:2023-10-16

我有这个内存布局:

0018FBD2 ?? ?? ?? ??    ?? ?? ?? ??
0018FBDA AA AA AA AA    BB BB BB BB  <- stuff I'm interested in
0018FBE2 ?? ?? ?? ??    ?? ?? ?? ??

在C语言中,我会这样做:

int* my_array = (int*) 0x18FBDA;
my_array[0]; // access

然而,我正在使用c++,我想声明一个引用:

int (&my_array)[2] = (???) 0x18FBDA;

要像这样使用:

my_array[0]; // access

但是正如你所看到的,我不知道如何强制转换它:

int (&my_array)[2] = (???) 0x18FBDA;

我该怎么做?这可能吗?

我发现使用数组引用的概念有点复杂,就像前面提到的tadman一样。但是你可以像处理任何类型一样,通过对指针解引用来实现。

int (&my_array)[2] = *reinterpret_cast<int(*)[2]>(0x18FBDA);

同样,如果你打算进行这样的强制转换,不要通过c风格的强制转换让它显得无辜。在我看来,这样的事情应该引人注目。

我会选择c风格的指针。但是如果你真的想用c++的方式(它不是,不比你在问题中提出的更多):

template<typename T, size_t S>
using arr = T[S];
auto& my_arr = *reinterpret_cast<arr<int,2>*>(0x18FBDA);

的一个更清晰的符号
auto& my_arr = *reinterpret_cast<int(*)[2]>(0x18FBDA);