面试题记录(B1)

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; 

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值