我在这个旧的C
程序中不理解这种语法,并且我没有设置它来测试代码以查看它的作用。我困惑的部分是数组的连接。我不认为C可以像这样处理自动类型转换,或者我在周五下午让我觉得太难了......
char wrkbuf[1024];
int r;
//Some other code
//Below, Vrec is a 4 byte struct
memcpy( &Vrec, wrkbuf + r, 4 );
知道这会发生什么吗?当你连接或添加一个int时,wrkbuf
会变成什么?
答案 0 :(得分:4)
wrkbuf + r
与&wrkbuf[r]
基本上wrkbuf
在表达式wrkbuf + 4
中使用时“衰减”为指向第一个元素的指针。然后,向其添加r
,使指针前进r
个元素。即,这里没有连接,它正在进行指针运算。
memcpy( &Vrec, wrkbuf + r, 4 );
从wrkbuf数组复制4个字节,从r
元素开始到Vrec
的内存空间
答案 1 :(得分:2)
memcpy(&Vrec, wrkbuf + r, 4)
将r
位wrkbuf
的4个字节复制到Vrec
。向数组中添加int时,会得到r
个位置的内存地址,在本例中为&wrkbuf[r]
。
示例memcpy
C实现(如您所见,它与strcpy
非常相似):
void *
memcpy (void *destaddr, void const *srcaddr, size_t len)
{
char *dest = destaddr;
char const *src = srcaddr;
while (len-- > 0)
*dest++ = *src++;
return destaddr;
}