首页 > memcpy和普通赋值的区别在哪?

memcpy和普通赋值的区别在哪?

比如有一个字符数组char a[n];需要在一个函数中改变其内容,则有以下两种形式:

func(char *a)
{
    memcpy(a,...);
}
func2(char **a)
{
    *a=...;
}

为什么会造成char *achar **a的差异?本质原因是什么?


没有“两种形式”,只有第一种能转。


我很好奇题主如何用func2改变它的内容。


一、

void func(char* a) //假设a的值是0x39
{
    char b = 5; //假设&b的值为0x3d
    memcpy(a, &b, sizeof(char));//那么这句的意思就是将0x3d存放的内容
    //也就是5,复制到0x39这个地方。这样,原来在0x39这个位置的10就变成了5!
}

二、

func2(char** a)
{
    char b = 10; //假设b的地址是0x39
    *a = &b; //假设a的值是0x2d
    //那么*a = &b就是把0x39放到0x2d这个位置上
}

假设b的地址是0x39,a的值为0x2d,那么*a = &b的意思就是将0x39这个值放到对应地址为0x2d的内存上。这样*a就能取得0x39**a就能取得0x39这个地址下的值,也就是10!

还有,上面这一段代码有错误!

Ps: 图中,下面一层可以看作地址,上面一层是对应地址存的值!
图片来源:这里

【热门文章】
【热门文章】