[英]Confusion with pointer program (c programming)
編譯該程序時,會收到我從未期望過的輸出。 當我查看該程序時,我希望指針的結果仍然是“ Hello,world!”。 因為據我所知指針從來沒有受到指針2。 但是,我的輸出顯示,當指針被打印時,它包含pointer2的字符串“ 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
的分配在內存中看起來像這樣:
+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+ | H | e | l | l | o | , | | w | o | r | l | d | ! | \n | \0 | (uninitialized data) | +---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+ ^ ^ | | | pointer2 | pointer
變量pointer
指向str_a[0]
而pointer2
str_a[2]
指向str_a[2]
。
當您以pointer2
為目標調用strcpy
時,您將更改pointer
的內存,該內存與pointer
也指向的數組相同,僅pointer2
幾個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.