一道C++笔试题
2012-06-14 17:02
295 查看
题目: 不用标准库,实现memcpy函数,并说明为什么返回指向dest_ptr的指针
void * memcpy(void * dest_ptr,const void * src_ptr,size_t count)
//由src_ptr所指向的内存区域复制count个字节到dest_ptr所指的内存区域。src_ptr和dest_ptr所指的内存区域不能重叠,函数返回指向dest_prt的指针
void * memcpy(void * dest_ptr,const void * src_ptr,size_t count)
{
const char * src=(const char *) src_ptr;
char * dest = (char *)dest_ptr;
void * ret_val =dest_ptr;
for(;count!=0;count--)
{
*dst=*src;
dst++;
src++;
}
return ret_val;
}
至于为什么返回指向dest_ptr的指针,纯粹是为了方便嘛,如:可以把函数放在格式化输出语句printf中,拷贝完了的同时可以打印出结果。总觉得这个问题问的真是与技术无关,不应该放在面试题里面。
这里提出一个问题, 为什么代码里面const char * src=(const char *) src_ptr; 要把指向void类型的指针赋值给指向char 型的指针,再用指向char型的指针进行运算?
原因是:代码里面有dst++;这样的指针运算,这里需要确保dst指向下一个字节。所以呢,代码改成const unsigned char * src=(const unsigned char *) src_ptr; unsigned char * dest = (unsigned char *)dest_ptr; 也是可以的。
void * memcpy(void * dest_ptr,const void * src_ptr,size_t count)
//由src_ptr所指向的内存区域复制count个字节到dest_ptr所指的内存区域。src_ptr和dest_ptr所指的内存区域不能重叠,函数返回指向dest_prt的指针
void * memcpy(void * dest_ptr,const void * src_ptr,size_t count)
{
const char * src=(const char *) src_ptr;
char * dest = (char *)dest_ptr;
void * ret_val =dest_ptr;
for(;count!=0;count--)
{
*dst=*src;
dst++;
src++;
}
return ret_val;
}
至于为什么返回指向dest_ptr的指针,纯粹是为了方便嘛,如:可以把函数放在格式化输出语句printf中,拷贝完了的同时可以打印出结果。总觉得这个问题问的真是与技术无关,不应该放在面试题里面。
这里提出一个问题, 为什么代码里面const char * src=(const char *) src_ptr; 要把指向void类型的指针赋值给指向char 型的指针,再用指向char型的指针进行运算?
原因是:代码里面有dst++;这样的指针运算,这里需要确保dst指向下一个字节。所以呢,代码改成const unsigned char * src=(const unsigned char *) src_ptr; unsigned char * dest = (unsigned char *)dest_ptr; 也是可以的。
相关文章推荐
- 由一道笔试题谈C++中const的使用及const_cast转换
- 一道c++笔试题
- 详解一道C++笔试题,考察重载、覆盖、多态
- 群硕一道笔试题(java,c++)
- [C/C++]一道指针,内存布局的笔试题[摘自CSDN]
- 一道c++笔试题
- 一道简单的C++笔试题,关于抽象shape类求图形周长的问题~
- C++及Windows异常处理(try,catch; __try,__finally; __try, __except)——一道笔试题引起的探究
- 一道C++的笔试题
- 每天一道C++笔试题 III --- strcmp
- 一道C++的笔试题
- C++及Windows异常处理(try,catch; __try,__finally; __try, __except)——一道笔试题引起的探究
- C++学习---一道笔试题:测试当前电脑系统是大端存储还是小端存储数据
- [C++]类级别的访问修饰符 -- 由一道笔试题引起的一道破窗
- c++笔试题两道,求解当中一道
- C++在同一行输入多个整数(用空格分开)储存到一个数组中(+一道笔试题)
- union--一道经典的C++笔试题
- C++及Windows异常处理(try,catch; __try,__finally; __try, __except) ----一道笔试题引起的探究
- 详解一道C++笔试题,考察重载、覆盖、多态
- 每天一道C++笔试题 II