指針圖解:數組
a[i]與*(a+i)兩者是等價的,當對指針進行一個加整數i操做時,其實獲得了一個地址。函數
注意函數調用棧與堆的區別,見程序的內存佈局此篇文章佈局
調用函數實現值的交換,區別以下:指針的地址指向做用一目瞭然。spa
數組名,實際上就是數組的首地址,表示數組在內存中的起始位置。.net
指向指針的指針,一般用來訪問指針數組3d
傳遞 函數參數和返回值的三種方法:指針
code舉例:code
1 int FuncByValue(int x) 2 { 3 x = x + 1; 4 return x; 5 } 6 7 void FuncByPointer(int* p) 8 { 9 *p = *p + 1; 10 } 11 12 13 void FuncByReference(int& r) 此處引用r和變量n就是同一個數據 14 { 15 r = r + 1; 16 } 17 18 int main() 19 { 20 21 22 int n = 0; 23 cout << "n的初始值,n=" << n << endl; 24 25 //調用傳值 26 FuncByValue(n); 27 cout << "傳值,n= " << n << endl; 28 29 //調用傳指針 30 FuncByPointer(&n); 31 cout << "傳指針n=" << n << endl; 32 33 //調用傳引用 34 FuncByReference(n); 35 cout << "傳引用,n= " << n << endl;
n的初始值,n=0
傳值,n= 0
傳指針n=1
傳引用,n= 2blog
在能夠的狀況下,應儘可能使用傳引用來傳遞函數參數,效率高,形式天然,結合了兩者的優勢。內存