1. 给出拷贝函数的定义
void * memcpy(void *dest, const void *src, size_t len)
写出拷贝函数体
void 意为“无类型”,void*是指无类型的指针,可以指向任何类型的指针
1) void 的使用
void a; 报错:非法使用void 类
适用场合:一是对函数返回值的限定(函数没有返回值的情况使用)二是对函数参数的限定(函数没有参数时使用)
注意:
在C中没有返回值类型,缺省为int,但是C++会报错缺少返回值类型
C++中函数的重载不能使用返回值类型实现(会忽略返回值)
C中函数如果没有参数,可以传递任意类型参数,不安全。但是C++中会报错
2)void*使用
任何类型的指针可以直接赋值给void*,void* 也可以直接赋值给任意类型的指针,不需要强制类型转换
例如:void* p1; int *p2; p1 = p2;
最常见用于库函数,如memset, malloc, memcpy
void * memcpy(void *dest, const void *src, size_t len);
void *memset(void *buffer, int c, size_t number);
这样任意类型的指针都可以传入函数中,体现了内存操作函数的意义,即操作的对象是内存,不管这片内存中是什么类型的数据。
拷贝函数的原型
void *memcpy(void *dest, const void *src, size_t len)
{
assert(dest);
assert(src);
char *desttype = dest; //如果报错,可以显示转换char *desttype = (char*)dest;
const char *srctype = src; //如果报错,可以显示转换const char *srctype= (char*)src;
while( len --)
{
*desttype ++ = *srctype++;
}
return desttype;
}