在编译这个程序时,我收到了一个我从未预料到的输出。当我检查这个程序时,我预计指针的结果仍然是"Hello, world!",因为据我所知指针从未受到 point2 的影响。然而,我的输出显示,当指针被打印时,它包含 point2 的字符串"y you guys!"。怎么会这样?谢谢! !
#include <stdio.h>
#include <string.h>
int main() {
char str_a[20];
char *pointer;
char *pointer2;
strcpy(str_a, "Hello, world!n");
pointer = str_a;
printf(pointer);
pointer2 = pointer + 2;
printf(pointer2);
strcpy(pointer2, "y you guys!n");
printf(pointer);
}
输出Hello, world!
llo, world!
Hey you guys!
您有一个单一的内存区域,数组str_a
。
在strcpy
调用和对pointer
和pointer2
的赋值之后,内存中看起来像这样:
变量pointer
指向str_a[0]
, pointer2
指向str_a[2]
。
当您以pointer2
作为目标调用strcpy
时,您将更改pointer2
指向的内存,这是pointer
也指向的同一个数组,只是向前移动了几个字符。