2012-04-22 63 views
0

我很困惑下面的代碼如何發送變量,然後將該變量更改爲堆棧頂部的值而不返回值。因此,如果1是在頂端我能做stack.pop(變量),然後將變量等於1。C++堆棧流行通用理論

void DynIntStack::pop(int &num) 
{ 
    StackNode *temp; // Temporary pointer 

    // First make sure the stack isn't empty. 
    if (isEmpty()) 
    { 
     cout << "The stack is empty.\n"; 
    } 
    else // pop value off top of stack 
    { 
     num = top->value; 
     temp = top->next; 
     delete top; 
     top = temp; 
    } 
} 
+1

你完全理解C++引用嗎? – geekosaur 2012-04-22 22:12:26

+0

是的,但也許我不正確地理解它? – chadpeppers 2012-04-22 22:13:12

+0

你需要看傳遞參考與傳遞值... – 2012-04-22 22:14:30

回答

3

這是通過參考傳遞的參數。

您可以將其視爲傳遞實際參數,而不僅僅是值。對參數進行的任何修改都會反映到原始變量,因爲它們是相同的變量。

其實這個參數是一個對真實值的內存地址的引用(指針)。

+0

啊我現在明白了。所以我們引用內存地址而不是實際值。 – chadpeppers 2012-04-22 22:16:12

1

當你調用一個函數,它的引用,如

void setNum(int &num) { 
    num = 4; 
} 

main(...) { 
    int myNum = 2; 
    setNum(myNum); 
    cout << myNum << endl; 
} 

你告訴編譯器傳遞參數的地址,而不是它的價值。爲參考分配一個值時,它將更改該地址的內存。然後,當函數返回時,原始變量仍然指向相同的地址,因此它假設新值。

在另一方面,當你聲明一個函數,一個,如

void leaveNumUnchanged(int num) { 
    num++; 
    cout << "The new value is " << num << endl; 
} 

功能使論點自己的私人副本和任何操作僅影響該副本。