區別 | 聲明 | 定義 | 調用 |
---|---|---|---|
指針 | void swap(int *,int *); | void swap(int *a,int *b){ } |
swap(p1,p2); |
引用 | void swap(int &,int &); | void swap(int &a,int &b){ } |
swap(i,j); |
【指針】: 在 C++中,數組永遠不會按值傳遞,它是傳遞第一個元素,準確地說是第 0個 的指針。html
// 如下三個聲明等價node
void putValues( int* );
void putValues( int[] );
void putValues( int[ 10 ] );
複製代碼
當進行數組參數傳遞,須要知道長度時,一種是經過額外表示長度的參數;另外一種是經過引用,以下:數組
【引用】:安全
//聲明
void sort( int (&arr)[10] );
//定義
void sort( int (&arr)[10] )
{
}
//調用
int main()
{
int a[10] = {1,8,5,6,3};
sort(a);
return 0;
}
複製代碼
from:矮油~ 數組引用:C++ 數組作參數 深刻分析bash
from: C++引用&函數傳遞數組例子函數
首先了解符號表,符號表在編譯程序工做的過程當中須要不斷收集、記錄和使用源程序中一些語法符號的類型和特徵等相關信息。這些信息通常以表格形式存儲於系統中。如常數表、變量名錶、數組名錶、過程名錶、標號表等等,統稱爲符號表。對於符號表組織、構造和管理方法的好壞會直接影響編譯系統的運行效率。ui
做用:spa
對一個多遍掃描的編譯程序,不一樣遍所用的符號表也每每各有不一樣。由於每遍所關心的信息各有差別。.net
from:從編譯器角度理解C++中的引用和指針3d
符號表 | 變量名 | 變量對應地址 | 變量值 |
---|---|---|---|
指針 | 指針自身的變量名(而非指向的變量名) | 指針自身的地址值 | 指向對象的地址值(能夠修改) |
引用 | 引用自身的不可變的名稱(即對應變量的別名 | 對應對象的地址值(不可修改) | 對應對象的值 |
【指針】:值傳遞方式。在棧中開闢了內存空間以存放由主調函數放進來的實參的值。實參指針自己的地址值不會變。
【引用】:也做爲局部變量在棧中開闢了內存空間,可是這時存放的是由主調函數放進來的實參變量的地址。被調函數對形參的任何操做都被處理成間接尋址,即經過棧中存放的地址訪問主調函數中的實參變量。正由於如此,被調函數對形參作的任何操做都影響了主調函數中的實參變量。
★細節區別:
from:傳遞與指針傳遞區別(進一步整理)