请更改指针

Memcpy change the pointers?

本文关键字:指针      更新时间:2023-10-16

我的任务是开发一个有两行内存代码的程序。我在研究记忆的时候发现了这个。

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

你知道为什么指针在这里改变了吗?

  1. a是一个数组,而不是指针。在堆栈上,有显著的差异,我在这里的回答中描述了这一点。
  2. a在堆栈上高于b,因此当您将10字节从a复制到b时,您已经从b的末尾删除了5字节,并替换了a的第一个5字节。请注意,这种特定的行为高度依赖于编译器标志和编译器版本,通常来说未定义
  3. 作为一个额外的注意,你没有打印a的地址,这是我认为你指的pointer。您已经打印了存储在那里的值。