memcpy如何使用void指针?

4

我正在尝试从一个指针复制到另一个指针。我知道要复制的大小。目标和源指针都是void指针。这样做有效吗?它实际上会将ELEMENT_SIZE(如128的整数)从源复制到目标吗?我知道这不是最理想的做法。但我想知道这是否可行。

memcpy(to_add, element_ptr, ELEMENT_SIZE);

1
是的,它有效。它的行为与循环字符指针在那些字节数上相同。 - M.M
2
考虑到memcpy被定义为接受void指针,你为什么认为它不起作用呢? - kaylum
试一试吧。如果它不能按你的预期工作,就回到SO论坛并提供一个最小完整可复现例子([mcve])。 - R Sahu
3个回答

3

3

从文档中了解到 memcpy 的参数描述:

void * memcpy ( void * destination, const void * source, size_t num );

destination: 目标数组的指针,用于存储要复制的内容,类型转换为 void* 指针。

source: 数据源的指针,用于存储要复制的数据,类型转换为 const void* 指针。

num: 要复制的字节数。size_t 是无符号整型。

memcpy 简单地从地址 source 开始取 num 个字节,并将它们复制到以地址 destination 开始的内存中。

指针是一个固定长度的内存地址,与类型无关。不管指针是 char *(指向字符数据)、int *(指向整数数据)还是 void *(指向未知类型的数据),它仍然只是指向内存。

由于 memcpy 复制的是一个明确数量的字节,所以被指向的数据类型是无关紧要的;它只需要内存地址即可。


0

指针的类型并不重要,重要的是将两个内存地址进行复制的过程非常简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接