[英]Why does the address of pointer changes while passing?
在我自己使用 struct 實現 BST 時,我對指針的工作原理感到困惑。
這是我的簡單代碼
#include <iostream>
#include <vector>
using namespace std;
void ptr_change(int* p){
cout<<&p<<endl;
/*
*address changes. why ? */
return ;
}
int main(){
//4. Pointer address integrity
cout<<"4. Pointer address integrity"<<endl;
int* p1;
cout<<&p1<<endl;
ptr_change(p1);
}
為什么將地址作為參數傳遞給function后地址會發生變化? 感謝你!
地址沒變。 您正在查看兩個單獨的變量。
在main
function 中,您定義了一個名為p1
的變量。 這個變量有一個特定的地址。 然后將p1
的值傳遞給 function ptr_change
。
在ptr_change
中,它有一個名為p
的參數。 這個變量有自己的地址,與main
中的p1
不同,盡管它包含與p1
相同的值。
您可能會感到困惑,因為所討論的參數是一個指針。 它與非指針參數沒有什么不同。 例如:
void foo(int x)
{
cout << &x << end;
}
int main()
{
int y = 0;
cout << &y << end;
foo(y);
return 0;
}
這里, foo
中的x
和main
中的y
是不同的變量,每個都有自己的地址,但它們都包含值 0。
您將指針的副本傳遞給 function。 這就像當你傳遞一個 -say- int 變量時,你傳遞了它的值的副本。 當您將指針傳遞給 int 時,您正在復制指針本身,它也指向相同的 memory 位置,但指針本身可以存儲在另一個隨機位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.