到底什麼時候用指針
在c/c++編程中,到底什麼時候該用指針來傳遞參數呢?總結如下:
1. 需要改變實參的時候, 只能用指針.
2. 傳遞大型結構並且"只讀"其元素的時候,
因爲大型結構通過值傳遞, 需要拷貝其每個元素, 這樣效率太低.
3. 需要遍歷數組或頻繁引用其元素時, 這樣效率比使用下標高.
4. 動態分配空間時, 必須使用指針.
5. 傳遞數組時, 必須使用指針.
6. 函數返回指針時, 比如fopen
另外,有時候需要使用二級指針,即指針的指針,例如:
MemAllocate(char *a){
a=(char *)malloc(sizeof(char));
}
當調用此函數進行內存分配時,發現不能分配內存不能成功,因爲此時對於a來說,形參改變了,但實參並不會改變,他們對應於不同的內存單元。正確的寫法應該是:
MemAllocate(char **a){
*a=(char *)malloc(sizeof(char));
}
這樣就能夠正確地分配內存了。
1. 需要改變實參的時候, 只能用指針.
2. 傳遞大型結構並且"只讀"其元素的時候,
因爲大型結構通過值傳遞, 需要拷貝其每個元素, 這樣效率太低.
3. 需要遍歷數組或頻繁引用其元素時, 這樣效率比使用下標高.
4. 動態分配空間時, 必須使用指針.
5. 傳遞數組時, 必須使用指針.
6. 函數返回指針時, 比如fopen
另外,有時候需要使用二級指針,即指針的指針,例如:
MemAllocate(char *a){
a=(char *)malloc(sizeof(char));
}
當調用此函數進行內存分配時,發現不能分配內存不能成功,因爲此時對於a來說,形參改變了,但實參並不會改變,他們對應於不同的內存單元。正確的寫法應該是:
MemAllocate(char **a){
*a=(char *)malloc(sizeof(char));
}
這樣就能夠正確地分配內存了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
CMake::CMakeLists.txt基本語法及常用
dieju8330
2020-07-08 10:35:13
while(cin)的理解
xudacheng06
2020-07-08 09:57:59
Operator new函數
xudacheng06
2020-07-08 09:57:59
C++中指針和引用的區別(轉)
沉沦风帆
2020-07-08 09:57:11
const和static const還有static區別
對於C/C++語言來講, const就是隻讀的意思,只在聲明中使用; static一般有2個作用,規定作用域和存儲方式.對於局部變量,static規
沉沦风帆
2020-07-08 09:57:11
使用std::function和std::bind實現函數回調
Ango_
2020-07-08 09:39:18
函數取地址與複製構造函數的使用
wenrenhua08
2020-07-08 09:06:32
C++ 中的explicit構造函數
C++ explicit構造函數 explicit按字面意思是明確的,顯式的。在C++類中只要定義的構造函數編譯器就不會幫你生成默認構造函數。
wenrenhua08
2020-07-08 09:06:32
C++ 中的const關鍵字
爲什麼使用const?採用符號常量寫出的代碼更容易維護;指針常常是邊讀邊移動,而不是邊寫邊移動;許多函數參數是隻讀不寫的。c
wenrenhua08
2020-07-08 09:06:21
鏈表的建立插入與刪除
陆家三少
2020-07-08 08:35:09
C++面試題之螺旋隊列
//螺旋隊列.cpp// 21 22 ... ...// 20 7 8 9 10// 19 6 1 2 11// 18 5 4 3 12// 17 16 15 14 13//看
陆家三少
2020-07-08 08:35:09
最大公約數的遞歸解法
陆家三少
2020-07-08 08:35:09