簡體   English   中英

C 指針地址差異

[英]C Pointer address of difference

int main() {
    
    int *x;
    int *y;

    y = x;

    printf("%p %p", &x,&y); // prints 0061FF1C 0061FF18
    printf("%p %p", x, y); // prints 00400080 00400080

    return 0;
}

為什么這些不打印相同的東西? 我認為只使用 x 和 &x 會得到相同的值。 另外,如果頂部的不匹配,為什么底部的匹配?

在這種情況下,當您說y = x時,它僅意味着y假定x碰巧具有的任何指針值。 你從來沒有用一個值初始化x ,所以它只是一些隨機的垃圾。

xy本身的地址將不同。 這是兩個獨立的變量,代表兩個獨立的指針。 您可以將它們的值分配為相同,但它們的地址保持不同。

您可能將此行為與以下內容混淆:

int x = 5;
int* y = &x;

現在y == &x&x&y繼續保持不同。

由於 C 沒有引用,因此您確實不會遇到兩個自變量位於同一地址的情況。

int *x; 您將x設置為指針。 它的值是指向值的地址。

所以:
*x = integer 值
x = 指針,即值的地址,存儲在x處的地址
&x = 指針的地址。 這是地址的地址。

那么y=x; 復制未初始化的地址,而不是值。

假設你寫了這個:

int main() {
    int x = 5;
    int y;

    y = x;

    printf("%p %p", &x, &y);
    printf("%d %d", x, y);
}

您希望兩行打印相同嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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