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

与指针程序混淆(c编程),c,pointers,C,Pointers,在编译这个程序时,我收到了一个我从未预料到的输出。当我回顾这个程序时,我期望指针的结果仍然是Hello,world!因为据我所知,指针从未受到指针2的影响。然而,我的输出显示,当指针被打印时,它包含指针2的字符串y,伙计们!。这是怎么回事??谢谢 #include <stdio.h> #include <string.h> int main() { char str_a[20]; char *pointer; char *pointer2;

在编译这个程序时,我收到了一个我从未预料到的输出。当我回顾这个程序时,我期望指针的结果仍然是Hello,world!因为据我所知,指针从未受到指针2的影响。然而,我的输出显示,当指针被打印时,它包含指针2的字符串y,伙计们!。这是怎么回事??谢谢

#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);
}

您只有一个内存区域,即数组str_a

strcpy调用后,指针和指针2的赋值在内存中类似:

+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+ | H | e | l | l | o | , | | w | o | r | l | d | ! | \n | \0 | (uninitialized data) | +---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+ ^ ^ | | | pointer2 | pointer 变量指针指向str_a[0],指针2指向str_a[2]


当您以指针2作为目标调用strcpy时,您会更改指针2指向的内存,即指针也指向的同一数组,只需再向前几个字符。

您只有一个内存区域,即数组stru\a

strcpy调用后,指针和指针2的赋值在内存中类似:

+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+ | H | e | l | l | o | , | | w | o | r | l | d | ! | \n | \0 | (uninitialized data) | +---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+ ^ ^ | | | pointer2 | pointer 变量指针指向str_a[0],指针2指向str_a[2]


当以指针2作为目标调用strcpy时,可以更改指针2指向的内存,即指针也指向的同一数组,只需再向前几个字符。

指针指向内存地址。也就是说,指针指向str_a的基址,指针2指向str_a的基址前2个字节。因此,每次访问任何指针时都会影响stru_a数据。指针指向内存地址。也就是说,指针指向str_a的基址,指针2指向str_a的基址前2个字节。所以,每次访问任何指针时都会影响stru_a数据。噢,显示得不错。再好不过了。哦,展示得不错。再好不过了。