3

我不理解这个旧C程序中的这种语法,也没有准备好测试代码以查看它的作用。我感到困惑的部分是与数组的串联。我不认为 C 可以处理这样的自动类型转换,或者我在我的脑海里太难了,因为它是星期五下午......

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

知道这里会发生什么吗?wrkbuf当您连接或添加 int 时会变成什么?

4

2 回答 2

4

wrkbuf + r是相同的&wrkbuf[r]

本质上wrkbuf,当在表达式中使用时wrkbuf + 4“衰减”为指向第一个元素的指针。然后添加r到它,它按r元素推进指针。即这里没有连接,它在做指针运算。

从 wrkbuf 数组中memcpy( &Vrec, wrkbuf + r, 4 );复制 4 个字节,从r第 th 个元素开始复制到Vrec

于 2011-02-04T20:31:52.737 回答
2

memcpy(&Vrec, wrkbuf + r, 4)r从 的-th 位置复制 4 个wrkbuf字节Vrec。当您将 int 添加到数组时,您将获得r它的第 - 位置的内存地址,在本例中为&wrkbuf[r].

示例memcpyC 实现(如您所见,它与 非常相似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;
}

看:

于 2011-02-04T20:28:26.680 回答