我不明白一些旧的C数组连接

时间:2011-02-04 20:24:29

标签: c arrays memory memcpy

我在这个旧的C程序中不理解这种语法,并且我没有设置它来测试代码以查看它的作用。我困惑的部分是数组的连接。我不认为C可以像这样处理自动类型转换,或者我在周五下午让我觉得太难了......

char wrkbuf[1024];
int r;
//Some other code
//Below, Vrec is a 4 byte struct
memcpy( &Vrec, wrkbuf + r, 4 );

知道这会发生什么吗?当你连接或添加一个int时,wrkbuf会变成什么?

2 个答案:

答案 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)rwrkbuf的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;
}