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

看板C_and_CPP作者 (帥翰)時間10年前 (2015/08/04 16:49), 編輯推噓6(6010)
留言16則, 4人參與, 最新討論串3/4 (看更多)
※ 引述《Feis (坐吃山空)》之銘言: : 推 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.. 非常感謝先進的分析 目前初學者小弟我為指標分類為下,並提出幾個疑惑的地方。 1, 很多書籍都透過變數位址來修改/定義變數資料,但今天不是直接修改/定義變數資料 就好?為什麼要繞一圈? 2,同上,是否是為了讀寫檔案所建立指標功能? 3,以矩陣為例,可用指標來取代矩陣。而兩種在記憶體上或其他地方哪裏不一樣? 4, 最後,指標能有一般變數沒有的「動態」功能,所以才需要指標? 在指標上的學習,小弟我一直在想這幾個問題?為何需要指標?每本書籍都把指標列為程 式碼重要的地方,無法理解~~~~~ 煩請先進們為小弟解惑 謝謝:) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.83.30.251 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1438706976.A.8EE.html

08/05 00:59, , 1F
寫程式要有記憶體概念呀,等你寫到眼睛脫窗就會想通了
08/05 00:59, 1F

08/05 01:04, , 2F
指標像是箱子上的標籤,箱子就是位址,比如說地上擺了一
08/05 01:04, 2F

08/05 01:04, , 3F
整排的箱子,裡面依序擺了許多東西,裡面的東西可以換,
08/05 01:04, 3F

08/05 01:04, , 4F
可是箱子可以一直留著不動,方便裡面來來去去的資料替換
08/05 01:04, 4F

08/05 01:04, , 5F
,這是一種動態的概念(請問這樣解釋對嗎....)
08/05 01:04, 5F

08/05 01:23, , 6F
別想太多,指標也是變數的一種啊啊...跟int一樣
08/05 01:23, 6F

08/05 01:25, , 7F
指標拿來做運算也是OK的
08/05 01:25, 7F

08/05 01:27, , 8F
1.有些時候那些"變數"是沒有名字, 只能靠指標來存取的
08/05 01:27, 8F

08/05 01:27, , 9F
eg. 動態分配來的空間
08/05 01:27, 9F

08/05 01:28, , 10F
3.簡答:陣列可以跳一列, 指標不能; 兩者在一些細節上也有差
08/05 01:28, 10F

08/05 01:29, , 11F
另外樓上, 對初學者不要講指標運算...那是個危險的坑
08/05 01:29, 11F

08/05 08:38, , 12F
樓上,那個坑是不是就是我跳的阿....這篇的同標題原文,
08/05 08:38, 12F

08/05 08:39, , 13F
就是我用指標運算,可是好像弄錯了
08/05 08:39, 13F

08/05 10:00, , 14F
進去學就會理解了 不學永遠也不會理解 思而不學則DIE
08/05 10:00, 14F

08/05 10:39, , 15F
指標用的好,要飯要到老
08/05 10:39, 15F

08/05 11:55, , 16F
樓上是要到多老了
08/05 11:55, 16F
文章代碼(AID): #1LmEqWZk (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1LmEqWZk (C_and_CPP)