一道C++笔试题

题目:   不用标准库,实现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; 也是可以的。

 


你可能感兴趣的:(C++,面试,DST)