簡體   English   中英

為什么指針的地址在傳遞時會發生變化?

[英]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中的xmain中的y是不同的變量,每個都有自己的地址,但它們都包含值 0。

您將指針的副本傳遞給 function。 這就像當你傳遞一個 -say- int 變量時,你傳遞了它的值的副本。 當您將指針傳遞給 int 時,您正在復制指針本身,它也指向相同的 memory 位置,但指針本身可以存儲在另一個隨機位置。

暫無
暫無

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

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