我的任务是开发一个包含两行memcpy代码的程序。所以我现在正在研究memcpy并发现了这一点。
int main() {
char a[10] = "123456789";
cout<<a<<endl;
char b[5];
memcpy(b, a, 10);
cout<<a<<endl;
cout<<a-5<<endl;
cout<<b<<endl;
}
输出将是:
123456789
6789
123456789
123456789
知道为什么这里的指针改变了吗?
最佳答案
a
是一个数组,而不是一个指针。在堆栈上,有一个很大的区别,我在答案here中对此进行了描述。a
在堆栈上高于b
,因此,当您将10
个字节从a
复制到b
时,您已经从5
末尾移走了b
个字节,并替换了第一个 5
个字节。请注意,此特定行为在很大程度上取决于编译器标志和编译器版本,并且通常来说是未定义的。
另外要注意的是,您尚未打印a
的地址,这就是我假设您所说的a
的地址。相反,您已经打印了存储在那里的值。