memcpy和普通赋值的区别在哪?
比如有一个字符数组char a[n];
需要在一个函数中改变其内容,则有以下两种形式:
func(char *a){
memcpy(a,...);
}
func2(char **a)
{
*a=...;
}
为什么会造成char *a
和char **a
的差异?本质原因是什么?
回答:
一、
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: 图中,下面一层可以看作地址,上面一层是对应地址存的值!
图片来源:这里
回答:
没有“两种形式”,只有第一种能转。
回答:
我很好奇题主如何用func2改变它的内容。
以上是 memcpy和普通赋值的区别在哪? 的全部内容, 来源链接: utcz.com/p/195258.html