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

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

func(char *a)

{

memcpy(a,...);

}

func2(char **a)

{

*a=...;

}

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

回答:

一、

void func(char* a) //假设a的值是0x39

{

char b = 5; //假设&b的值为0x3d

memcpy(a, &b, sizeof(char));//那么这句的意思就是将0x3d存放的内容

//也就是5,复制到0x39这个地方。这样,原来在0x39这个位置的10就变成了5!

}

twoints

二、

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!

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

towpointers

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

图片来源:这里

回答:

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

回答:

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

以上是 memcpy和普通赋值的区别在哪? 的全部内容, 来源链接: utcz.com/p/195258.html

回到顶部