[英]Difference between the address of a pointer and the address that a pointer contains
[英]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
,所以它只是一些隨機的垃圾。
x
和y
本身的地址將不同。 這是兩個獨立的變量,代表兩個獨立的指針。 您可以將它們的值分配為相同,但它們的地址保持不同。
您可能將此行為與以下內容混淆:
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.