Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;无效使用void,为什么? charmem[8]; uint64_t*内存{(uint64_t*)(void*)和mem[0]}; 标准::cout_C++_Pointers - Fatal编程技术网

C++ C++;无效使用void,为什么? charmem[8]; uint64_t*内存{(uint64_t*)(void*)和mem[0]}; 标准::cout

C++ C++;无效使用void,为什么? charmem[8]; uint64_t*内存{(uint64_t*)(void*)和mem[0]}; 标准::cout,c++,pointers,C++,Pointers,无效使用void,为什么 这是因为void*(存储在此指针处的项目)的大小未知 如果要以字节为单位计算指针之间的距离,请将它们转换为大小为1字节的指针(char*、unsigned char*、uint8_t*等): std::cout不能对空指针执行指针算法-请参阅。这是由于void没有定义的“大小”,而例如int*x,您知道x+1将是sizeof(int)字节,沿着x的地址 您也可以对其进行测试-删除-两侧的任何一个表达式都可以让它编译。您想做什么?将char[]重新解释为单个uint64\

无效使用void,为什么

这是因为
void*
(存储在此指针处的项目)的大小未知

如果要以字节为单位计算指针之间的距离,请将它们转换为大小为1字节的指针(char*、unsigned char*、uint8_t*等):


std::cout不能对空指针执行指针算法-请参阅。这是由于
void
没有定义的“大小”,而例如
int*x
,您知道
x+1
将是
sizeof(int)
字节,沿着
x
的地址


您也可以对其进行测试-删除
-
两侧的任何一个表达式都可以让它编译。

您想做什么?将
char[]
重新解释为单个
uint64\u t
?您不能在
void*
@CoryKramer上执行指针算术是的,基本上,尝试将
char[]
转换为
uint64\u t
数组。我原以为这很容易,但这让我感到困惑…VS2013显示错误-
void*:未知大小
。表达式必须是指向完整对象类型的指针。顺便问一下,如果我将它们转换为
(uint64\u t*)
,会发生什么?我的假设是,差异仍然相同,以字节度量?@user3728501它将以四舍五入到底部的
uint64\u t
(8字节)来度量距离。例如,距离
2字节
将是
0 uint64\u t
“距离2字节将是0 uint64\u t”-这没有任何意义?@user3728501嗯,这是因为在指针处存储
uint8\u t
时,在
uint64\u t
中计数是错误的。使用1字节指针以字节为单位计算大小(距离),并使用指向实际存储项(普通类型、对象、结构)的指针计算项数。
char mem[8];
uint64_t *memory{(uint64_t*)(void*)&mem[0]};
std::cout << "diff: " << (void*)memory - (void*)(&mem[0]) << std::endl;
error: invalid use of ‘void’
std::cout << "diff: " << (void*)memory - (void*)(&mem[0]) << std::endl;