指针 - 查询

sid*_*com 1 c pointers memory-address

#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;   
}
Run Code Online (Sandbox Code Playgroud)

输出:

Test!
Hello World
Run Code Online (Sandbox Code Playgroud)

为什么我没有Hello Test!?我以为id会覆盖World-part ptr1.

tem*_*def 6

这条线

ptr2 = "Test!\n";
Run Code Online (Sandbox Code Playgroud)

难道改变在被指向的缓冲区的内容ptr2.相反,它只是改变了什么ptr2指向.在C中,指针赋值只是说"我希望这个指针停止引用它用于引用的内容,而是指向别的东西." 如果你真的想改变值正指向,您可能需要取消引用指针或称之为解引用它的功能(例如strcpy,strcat等)

因此,输出就是您在上面列出的内容,"Hello World"完好无损.