假设我有以下代码:
char buff[100] = {0};
char msg[] = "hello!";
memcpy(buff, msg, sizeof(msg));
OR
memcpy(&buff, msg, sizeof(msg));
为什么这两条Memcpy行的工作方式完全相同?
我预期当buff被使用时,它会将msg复制到buff衰减到的指针本身存储的内存中,而不是指针实际指向的内存中.
当我想象这些指针是这样的:
&buff->buff->buff[0]
个
我可以解释为什么他们的行为是一样的.但当我想象实际的记忆是这样的:
address | value | (name)
-------------- --------- ----------------
0x1000 | 'h' | (buff[0])
0x1001 | 'e' | (buff[1])
... etc
__________________________________________
0x5000-0x5008 | 0x1000 | (buf - char *)
__________________________________________
0x8000-0x8008 | 0x5000 | (&buf - char**)
__________________________________________
现在,我不明白为什么不将消息写入地址0x5000,而是覆盖值0x1000.