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.
这条线
ptr2 = "Test!\n";
Run Code Online (Sandbox Code Playgroud)
难道不改变在被指向的缓冲区的内容ptr2.相反,它只是改变了什么ptr2指向.在C中,指针赋值只是说"我希望这个指针停止引用它用于引用的内容,而是指向别的东西." 如果你真的想改变值正指向,您可能需要取消引用指针或称之为解引用它的功能(例如strcpy,strcat等)
因此,输出就是您在上面列出的内容,"Hello World"完好无损.