栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言 模拟memmove

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言 模拟memmove

#include
#include
#include

void * my_memmove(void *x,const void *y,size_t num)  //定义函数为void * ,返回拷贝之后内存的地址
{    
    void *z=y; // 存储下y的地址,返回时用到
    assert(x && y); // 断言 检测合法性(是否为空指针) 
    if(x     {
        while(num--)
        {
            *((char *)x)++=*((char *)y)++;   //强制转换成char *型,单个字节拷贝
        }
            
    }
    else if(x==y)
    {
        return z;
    }
    else
    {
        while(num--)
        {
            *((char *)x+num)=*((char *)y+num);
        }
    }

    //或者
    
    return z;
}

int main()
{
    int i=0;
    void *p=NULL;
    int a[]={1,2,3,4,5,6,7,8,9};
    // int b[]={0};
    p=my_memmove(a+2,a,20);//将a的前五个数拷贝进b,返回地址用p接收
    for(i=0;i<9;i++)
    {
        printf("%5d",*(((int *)p)++));  //将p强制转换成int * 再 ++
    }
    printf("n");
    return 0;
}

------------------------------------

朋友问我为什么移动19个字节而不是20个:

        1在内存中的存储方式[01] [00] [00] [00]

        (.代表指针所在位置)     如果移动20个字节 [ ][ ][ ][ ].  指针指向下一个元素,操纵的下一个元素的首地址首字节,改变的是下一个元素。

                                                    如果移动19个字节 [ ][ ][ ].[ ] 指针指向本元素,操纵的本元素的最后一个字节,改变本元素,指针继续往前走就可以把本元素的所有字节都改变。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352567.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号