与指针程序的混淆(c编程)

  • 本文关键字:编程 指针 程序 pointers
  • 更新时间 :
  • 英文 :


在编译这个程序时,我收到了一个我从未预料到的输出。当我检查这个程序时,我预计指针的结果仍然是"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调用和对pointerpointer2的赋值之后,内存中看起来像这样:

<>之前+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+| H | e | l | l | o |, | w | o | r | l | d | !| n | |(未初始化的数据)|+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+^ ^| || pointer2|指针之前

变量pointer指向str_a[0], pointer2指向str_a[2]

当您以pointer2作为目标调用strcpy时,您将更改pointer2指向的内存,这是pointer也指向的同一个数组,只是向前移动了几个字符。

最新更新