我对 C 有点生疏,我正在研究 memcpy 的实现。我想知道为什么你需要将指针 pDst 转换为无符号字符? pSrc 也一样吗?
void memcpy( void *pDst, void *pSrc, int len )
{
int i;
if( pDst == NULL || pSrc == NULL )
return;
for( i=0; i<len; i++ ) {
((unsigned char*)pDst)[i] = ((unsigned char*)pSrc)[i];
}
}
最佳答案
指向 void
的指针是一种有用的简写形式,表示“指向任何东西的指针”,但编译器反过来并不知道所指向的东西有多大。
因此,当您对其进行任何类型的算术运算时(例如将其作为数组进行索引),您必须使用一些明确的大小。在这种情况下,因为您尝试逐字节复制,所以您使用转换为 unsigned char
,这通常是表示“1 字节”的一种方式。
(乍一看这似乎是总是是真的。但在memcpy
之外的情况下,您可能指向更大的东西,比如某种结构,那么索引/算术实际上指的是该结构大小的增量,因此您可以从一个结构跳到下一个结构。)
关于c - Memcpy 类型转换 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14928555/