Re: [問題] 自己練習運用基礎的指標小問題

看板C_and_CPP作者 (坐吃山空)時間8年前 (2015/08/04 19:36), 8年前編輯推噓2(2016)
留言18則, 6人參與, 最新討論串2/4 (看更多)

08/04 19:02,
想問,指標可以運用的地方是?目前只知道抓變數的位置
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

08/04 19:41, , 1F
function pointer
08/04 19:41, 1F

08/04 19:43, , 2F
list tree等結構
08/04 19:43, 2F

08/04 19:44, , 3F
list, tree 基本上就是動態配置
08/04 19:44, 3F

08/04 19:44, , 4F
實際上 list 跟 tree 不一定要用指標
08/04 19:44, 4F
※ 編輯: Feis (140.122.83.198), 08/04/2015 19:59:24

08/04 22:17, , 5F
實用上很難不用指標,用陣列實作很浪費空間,而如果要
08/04 22:17, 5F

08/04 22:17, , 6F
先做一個pool給tree/list用-那就是list。
08/04 22:17, 6F

08/04 22:18, , 7F
再不然就是樹很小list很短
08/04 22:18, 7F

08/04 22:40, , 8F
大小跟長短不是問題
08/04 22:40, 8F

08/04 22:40, , 9F
動態配置重點是動態. 實務上很多都是用陣列實作的
08/04 22:40, 9F

08/04 22:41, , 10F
主要是樹跟串列的性質還有使用情況
08/04 22:41, 10F

08/04 22:41, , 11F
當然我說的很多不是比較多的意思
08/04 22:41, 11F

08/04 22:44, , 12F
主要問題還是一般情況下陣列能配置的大小受到限制
08/04 22:44, 12F

08/04 22:45, , 13F
上面說的陣列跟指標是不衝突的. 我發現這樣說會有誤會.
08/04 22:45, 13F

08/04 22:47, , 14F
我自己都亂掉了 QQ
08/04 22:47, 14F

08/05 00:10, , 15F
請詳讀資料結構使用c或是c++ 你會收益良多
08/05 00:10, 15F

08/05 00:45, , 16F
寫遊戲外掛也要用到大量指標
08/05 00:45, 16F

08/05 12:35, , 17F
共享函式酷的輸入表也是指標做的
08/05 12:35, 17F

08/05 12:37, , 18F
才可以編譯期 link 執行期 binding
08/05 12:37, 18F
文章代碼(AID): #1LmAEfQd (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1LmAEfQd (C_and_CPP)