c++;-类函数内数组的长度 我知道有几个线程问了一个类似的问题,但是我找不到解决方法,我对C++有点新。
我想计算DWORD数组的长度。所以它只是一个未签名的长字符c++;-类函数内数组的长度 我知道有几个线程问了一个类似的问题,但是我找不到解决方法,我对C++有点新。,c++,arrays,size,dword,C++,Arrays,Size,Dword,我想计算DWORD数组的长度。所以它只是一个未签名的长字符 DWORD offsets[] = {0x378, 0x14, 0x0}; 这是func的标题定义: DWORD allocateAddress(DWORD, DWORD[]); 这在cpp功能中: DWORD Window::allocateAddress(DWORD baseAddress, DWORD offsets[]) { DWORD buffer; DWORD pointer; int leve
DWORD offsets[] = {0x378, 0x14, 0x0};
这是func的标题定义:
DWORD allocateAddress(DWORD, DWORD[]);
这在cpp功能中:
DWORD Window::allocateAddress(DWORD baseAddress, DWORD offsets[])
{
DWORD buffer;
DWORD pointer;
int level = 3; // Length of offset array should be calculated here.
for (int c = 0; c < level; c++)
{
if (c == 0)
{
buffer = this->read(baseAddress);
}
pointer = buffer + offsets[c];
buffer = this->read(pointer);
}
return pointer;
}
如果我在allocateAddress函数中这样做,我只得到4个字节。在main方法中测试它会返回12个字节,这是我想要的值
std::cout << sizeof(Address::offset) << std::endl;
std::cout模板函数可以传递静态数组的大小:
template <size_t COUNT>
DWORD allocateAddress(DWORD baseAddress, DWORD (&offsets)[COUNT]) {
// now, sizeof(offsets) gives the expected size
// as a bonus, you could also access the element count in COUNT
}
模板
DWORD分配地址(DWORD基地址、DWORD(&偏移量)[计数]){
//现在,sizeof(offset)给出了预期的大小
//作为奖励,您还可以在count中访问元素count
}
通常,模板内联在窗口类定义内部的头文件中(因此我去掉了Window::scope说明符)。这是因为C/C++不会将数组的长度保存在内存中的任何位置
“offsets”参数声明为未定义长度的数组。这当然是正确的,因为您希望支持任何数组,但这意味着在运行时无法知道数组的大小
可以这样想:“sizeof”关键字只返回基于变量声明的结果,而不是运行时的实际大小
如果您的变量以这种方式被删除:
DWORD offsets[3]
然后它的类型是“3个DWORD的数组”(DWORD[3]
),因此sizeof将返回“3个DWORD的数组”或12个字节的大小(以字节为单位)。在您的例子中,数组的大小隐式定义为DWORD[3]
,因为您使用三个值初始化它
但如果将参数声明为:
DWORD offsets[]
它的类型变成“长度未知的数组”(或DWORD[]
)。由于这在功能上与常量指针相同,“sizeof”将充当一个元素。因此,“sizeof”返回1*sizeof(DWORD)=4。如果有固定大小的数组,请使用std::array
。如果没有,请使用类似于std::vector
的容器。除其他事项外,大小已安全地包含在其中供您使用。@chris谢谢,我还没有找到此线程。值得注意的是,即使参数是DWORD OFFSET[3]
,它仍然会衰减。事实上,重要的是参数的声明,而不是它的当前值。
DWORD offsets[]