簡體   English   中英

與指針程序(C編程)混淆

[英]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調用之后, pointerpointer2的分配在內存中看起來像這樣:

+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+
| 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM