如何在c++中使用memcpy()常量例如,我使用
#define constant1 0x0080当我想的时候
memcpy(&some_memory_block, constatnt1, 2 );上面写着
error C2664: 'memcpy' : cannot convert parameter 2 from 'int' to 'const void *'发布于 2013-02-16 21:09:48
您可以尝试使用常量,而不是预编译器定义。
const unsigned short int constant1 = 0x0080;
memcpy(&some_memory_block, &constant1, 2 );发布于 2013-02-16 21:26:39
你的常量(宏)实际上只是一个文字。因此,它没有可以作为参数提供给memcpy或另一个需要内存位置的函数的地址。如果你想这样做,你需要有一个真正的常量(比如const int),就像其他答案中建议的那样。
与宏相反的实常量(这只是一个文本替换,在本例中是一个文字)通常在功能上与文字相同,只要您不接受它的地址。但是,可以接受它的地址,在这一点上,它的行为就像一个“普通”变量。这意味着您可以在其地址上使用memcpy。
然而,通常“更正确”的答案是:根本不要做这种事情。如果某件事是一个常量,你不应该复制它(当然有例外,但通常你不应该这样做)。唯一有效的原因是,您需要一个常量值来初始化非常量变量,但是将其赋值比将其赋值给memcpy要容易得多。
否则,复制常量只会增加冗余,毫无益处地消耗额外的内存,增加缓存压力,并破坏许多编译器优化。例如,如果编译器知道像a = b + c - c + b这样的表达式是常量(当然,也会计算复杂得多、不太明显的表达式),它就可以将这些表达式简单地优化为a = computed_value_of_2b。但是,当给定一些内存位置时,编译器必须发出在运行时计算的代码,它没有其他选择。
发布于 2013-02-16 21:11:15
在您的例子中,当您编译代码时,constant1被替换为0x0080。这一行
memcpy(&some_memory_block, constatnt1, 2 );变成了
memcpy(&some_memory_block, 0x0080, 2 );这
如果您查看memcpy,您将看到memcpy为第二个参数请求了一个指针。
你必须创建一个指向memcpy的指针
const int constant1 = 0x0000;
memcpy(&some_memory_block, &constant1 , 2 );https://stackoverflow.com/questions/14910615
复制相似问题