#include <stdio.h>
#include <stdlib.h>

int main( void ) {
   char *ptr1 = "Hello World\n";
   char *ptr2;

   ptr2 = ptr1 + 6;
   ptr2 = "Test!\n";

   printf("%s",ptr2);
   printf("%s",ptr1);

   return EXIT_SUCCESS;
}

输出:
Test!
Hello World

为什么我没有得到Hello Test!
我以为id会覆盖World中的ptr1部分。

最佳答案

当你给指针赋值时,比如ptr1ptr2你不是在改变储存在那里的东西的价值,你只是在改变它们指向的东西。
当你说:

ptr2 = ptr1 + 6;

您正在使ptr2指向ptr1字符串的第6个元素然后你说:
ptr2 = "Test!\n";

这意味着ptr2现在指向内存中其他位置的一个新的、不同的字符串,该字符串包含"Test!\n"所以你有这个:
ptr  ------->  "Hello World\n"
ptr2 ------->  "Test\n"

现在,当你打印它们时,你会得到:
Test!
Hello World

10-04 14:46