[爆卦]c函式指標是什麼?優點缺點精華區懶人包

為什麼這篇c函式指標鄉民發文收入到精華區:因為在c函式指標這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者Feis (坐吃山空)看板C_and_CPP標題Re: [問題] 自己練習運用基礎的指標小問題時...


M013020058: 想問,指標可以運用的地方是?目前只知道抓變數的位置 08/04 19:02

這問題有點廣,我試著整理看看。

指標本質上就只是存放一個記憶體位址。
所以問題就回到為什麼需要知道記憶體的位址。

很顯然地,其實我們大部分的情況都不在乎這個位址,而是在乎這個位址所存放的資料。
存放位址只是為了間接完成某些不用指標無法完成的目的。

所以看到指標的使用,要思考的是它的目的是甚麼。
如果他沒有任何特殊的目的,那肯定就是不該用指標。

因為在 C 跟 C++ 中有些使用選擇上的不同,不過下面我就全部混在一起講:
(註: 下面的物件不專指 C++ 裡的物件)

1. 在 C 實現參考語意: 想將某個物件作為引數傳入函式,而該函式內部可以修改到原
本物件的內容。

2. 動態配置: 物件的大小會動態改變或者想讓物件的生命週期不受可視範圍限制

3. 提升呼叫函式的效率: 在 C 或早期的 C++,引數會在函式內被複製一份。如果引數
是複製成本比較高的類型 (例如陣列、大型結構),則傳遞
位址可以減少複製成本。

4. 多型: 不論是 C 的 void * 或是 C++ 裡的多型,我們可以用一個指標指向不一樣類
型的物件。

5. 加速編譯: 宣告指標的時候,所指向的類別/結構只需要先被宣告而不需要先被定
義。使用這個技術可以讓我們在修改定義的時候,不需要重新編譯只使用
指標而沒真正存取內容的部分。

6. 將不同名稱的東西放在同一個陣列裡: 利用指標可以將不同名稱的東西也都可放在
同一個陣列。例如常見的函式指標陣列。

7. 可以表示選擇性的值: null pointer 算是少數可以明確代表 "沒有" 概念的東西。

8. 在函式間傳遞函式: 函式本身無法複製卻可取址。所以要傳遞至函式中,在 C 需要使
用指標。

其他我想到再補 Orz..

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.122.83.198
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1438688169.A.6A7.html
x000032001: function pointer 08/04 19:41
x000032001: list tree等結構 08/04 19:43
Feis: list, tree 基本上就是動態配置 08/04 19:44
Feis: 實際上 list 跟 tree 不一定要用指標 08/04 19:44
※ 編輯: Feis (140.122.83.198), 08/04/2015 19:59:24
MOONRAKER: 實用上很難不用指標,用陣列實作很浪費空間,而如果要 08/04 22:17
MOONRAKER: 先做一個pool給tree/list用-那就是list。 08/04 22:17
MOONRAKER: 再不然就是樹很小list很短 08/04 22:18
Feis: 大小跟長短不是問題 08/04 22:40
Feis: 動態配置重點是動態. 實務上很多都是用陣列實作的 08/04 22:40
Feis: 主要是樹跟串列的性質還有使用情況 08/04 22:41
Feis: 當然我說的很多不是比較多的意思 08/04 22:41
Feis: 主要問題還是一般情況下陣列能配置的大小受到限制 08/04 22:44
Feis: 上面說的陣列跟指標是不衝突的. 我發現這樣說會有誤會. 08/04 22:45
Feis: 我自己都亂掉了 QQ 08/04 22:47
qas612820704: 請詳讀資料結構使用c或是c++ 你會收益良多 08/05 00:10
stupid0319: 寫遊戲外掛也要用到大量指標 08/05 00:45
firose: 共享函式酷的輸入表也是指標做的 08/05 12:35
firose: 才可以編譯期 link 執行期 binding 08/05 12:37

你可能也想看看

搜尋相關網站