我的代码:
.h
文件:
extern const int* g_position;
inline DWORD pos_x(BYTE v) {
if (1 <= v && v <= 3)
return g_position[v][0];
return 0;
}
inline DWORD pos_y(BYTE v) {
if (1 <= v && v <= 3)
return g_position[v][1];
return 0;
}
.cpp
文件:
const int* g_position = (int*) 0x86b2fdc;
我想做的是处理基本上是二维数组的函数:
(DWORD (*)[4][2]) 0x86b2fdc<g_position>
由于某种原因,我在编译时遇到以下错误:
In function 'gev::DWORD pos_y(BYTE)':
error: invalid types 'const int[int]' for array subscript
return g_position[v][0];
我的代码有什么问题?我将 g_position
声明为数组类型,因此它应该可以工作。
最佳答案
g_position
被声明为 int*
,它只允许一个级别的取消引用,但您正在尝试执行两个取消引用。您需要将声明改为 int**
:
extern const int** g_position;
const int** g_position = (int**) 0x86b2fdc;
更新:
int**
与 int[][]
并不完全相同。但是,如果您考虑到 int[4][2]
与 int[8]
具有相同的内存布局,那么您可以访问int[]
使用 int*
,然后试试这个:
extern const int* g_position;
inline DWORD pos_x(BYTE v)
{
if (1 <= v && v <= 3)
return g_position[(v*4)+0];
return 0;
}
inline DWORD pos_y(BYTE v)
{
if (1 <= v && v <= 3)
return g_position[(v*4)+1];
return 0;
}
const int* g_position = (int*) 0x86b2fdc;
关于c++ - 寻址函数时数组下标的无效类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25151017/