与指针程序混淆(c编程)
在编译这个程序时,我收到了一个我从未预料到的输出。当我回顾这个程序时,我期望指针的结果仍然是Hello,world!因为据我所知,指针从未受到指针2的影响。然而,我的输出显示,当指针被打印时,它包含指针2的字符串y,伙计们!。这是怎么回事??谢谢与指针程序混淆(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;
#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数据。噢,显示得不错。再好不过了。哦,展示得不错。再好不过了。