要将数组b[]复制到数组a[]中,可以使用函数memcpy,如下所示:memcpy(a,b,sizeof(a))。
但是memcpy只是将字节从一个地方复制到另一个地方。
我的问题是:
1.
memcpy如何通过复制字节将数组b[]的元素复制到a[]中? 2.为什么提供sizeof(a)作为参数?
我对编程很陌生,所以,温柔点。
发布于 2013-06-18 11:51:19
sizeof(a)是数组a的总大小。例如,在
int a[3];
printf("%d", sizeof(a));在大多数系统中,sizeof a都是12 (因为int通常是4个字节,其中有3个字节)。
memcpy不知道a是一个数组。它只知道a指向某个内存地址,所以您必须告诉它要传递多少字节。大多数地方将memcpy的签名描述为:
void *memcpy(void *dst, const void *src, size_t nbytes)发布于 2013-06-18 11:50:17
#include <string.h>
void *
memcpy(void *s1, const void *s2, register size_t n)
{
register char *p1 = s1;
register const char *p2 = s2;
if(n) {
n++;
while (--n > 0) {
*p1++ = *p2++;
}
}
return s1;
}下面是memcpy的源代码。如您所见,它从寄存器1逐个移动到寄存器1中的每个元素。
所以它知道寄存器有多大,所以在复制整个寄存器之前,它必须跳过多少元素。
发布于 2013-06-18 11:47:44
memcpy的工作方式与组装指令MOV的工作原理一样(显然,memcpy必须使用MOV实现)。不同之处在于,我们移动了一个数据块,而不是一个变量。需要块的大小,因为进程需要知道要从一个位置复制到另一个位置的字节数。
https://stackoverflow.com/questions/17167956
复制相似问题