一級指針與二級指針的概念和用法
指針的概念
指針就是地址, 利用這個地址可以找到指定的數據
指針就是地址, 那麼在使用的時候, 常常會簡單的說 指針變數為指針
指針變數就是存儲地址的變數
int *p1;// 申請了一個變數, 即在記憶體中開闢了一塊記憶體, 存儲數據
// 開闢了 8 個位元組, 在 Mac 下 指針都占 8 個位元組
使用指針, 實際上應該說成使用指針變數
1> 算術運算
+1 移動幾個位元組?
看類型: int *, long *, char *
2> 獲得地址表示的數據
指針裡面存儲的是地址, 就可以將該地址中的數據取出來
定址運算符 *&p1 -> p1
3> 修改改地址中的數據
4> 作為函數參數的使用(*****)
如果傳遞的不是指針變數, 而是普通的變數, 就是值傳遞: 函數內與函數外是兩個不同的變數, 只是存儲的數據相同(好比發送文件)
如果傳遞的是指針變數, 即傳遞的是地址, 那麼就是引用傳遞: 函數內外可以看成同一個變數(好比發送鏈接)
由於函數參數使用指針後, 可以實現函數內變數修改後, 影響到函數外的變數. 因此常常將函數參數設置為指針類型的變數
實現利用參數返回多個數據的函數
scanf("%d", &num);
二級指針
二級指針就是指向一級指針的指針(n 級指針就是 指向 n-1 級指針的 指針)
指針的本質就是地址, 那麼幾級指針也只是一個地址, 唯一不同的就是定址的結果(*p)
1>在開發中使用 二級指針的地方就是利用函數或方法返回一個 一級指針數據
2> 如果需要用函數參數返回數據, 如果返回的是一般的數據, 傳遞一級指針
3> 如果返回的是一個一級指針, 那麼參數應該是一個二級指針
4> 如果返回的是一個 n 級指針, 那麼參數應該是一個 n+1 級指針
下圖中*p1指的是num的值,*p2指的是p1記憶體的地址,**p2也指的是num的值......