我不明白一些旧的 C 数组串联

发布于 2024-10-16 05:31:10 字数 327 浏览 2 评论 0原文

我不明白这个旧的 C 程序中的语法,并且没有设置测试代码以了解它的作用。我感到困惑的部分是与数组的串联。我不认为 C 可以像那样处理自动类型转换,或者我是否让它在我的脑海中变得太困难,因为现在是星期五下午......

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

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

I don't understand this syntax in this old C program, and am not set up to test the code to see what it does. The part I am confused about is the concatenation to the array. I didn't think C could handle auto-typecasting like that, or am I making it too difficult in my head being that its Friday afternoon...

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

Any idea what will happen here? What does wrkbuf become when you concatenate or add an int to it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安静 2024-10-23 05:31:11

memcpy(&Vrec, wrkbuf + r, 4)wrkbuf 的第 r 位置的 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;
}

请参阅:

memcpy(&Vrec, wrkbuf + r, 4) copies 4 bytes from the r-th position of wrkbuf into Vrec. When you add an int to an array, you get the memory addresss of the r-th position of it, in this case, &wrkbuf[r].

Sample memcpy C implementation (as you can see, it is quite similar to 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;
}

See:

苦笑流年记忆 2024-10-23 05:31:10

wrkbuf + r&wrkbuf[r] 相同

当在表达式 wrkbuf + 4 中使用时,本质上是 wrkbuf code>“衰减”为指向第一个元素的指针。然后向其中添加 r,这将使指针前进 r 元素。即这里没有进行连接,它正在执行指针算术。

memcpy( &Vrec, wrkbuf + r, 4 ); 从 wrkbuf 数组中复制 4 个字节,从第 r 元素开始复制到 的内存空间中弗雷克

wrkbuf + r is the same as &wrkbuf[r]

Essentially wrkbuf when used as in the expression wrkbuf + 4 "decays" into a pointer to the first element. You then add r to it, which advances the pointer by r elements. i.e. there's no concatenation going on here, it's doing pointer arithmetic.

The memcpy( &Vrec, wrkbuf + r, 4 ); copies 4 bytes from the wrkbuf array , starting at the rth element into the memory space of Vrec

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文