簡體   English   中英

如何學習C指針?

[英]How to learn C pointers?

我經常使用指針,但是每當我和它們一起工作時,我覺得可能不會像我期望的那樣工作。 我的頭腦不確定他們將如何表現。

你有什么建議? 我想更好地學習指針。

試試Binky

最好的方法是編寫程序。 親身體驗K&R,完成基礎知識並開始編寫一些程序。
樣本問題可能是:
1)單鏈表,雙鏈表。
2)基本的樹問題。
- 將值插入樹中。
- 找到高度,深度,刪除樹等。

我建議閱讀Kernighan和Ritchie的“The C Programming Language”。

第5章討論指針和數組。 這本書寫得很清楚,包含了演示概念的插圖,還有練習你可以做的練習。 更好的是,這本書很簡短。

仔細執行你可以在網上找到的所有練習 - 這一個這一個等等(跳過C ++特定部分,如“參考”,如果你真的只關心C)。 如果有的話,請務必仔細研究或排練練習中給出的每個先決條件。 完成后,將您的解決方案代碼與作為官方解決方案提供的代碼進行比較 - 他們是否在給出的示例中編譯和工作相同? 那些更廣泛的變種怎么樣? 你有任何疑問,請問堆棧溢出! - )。

如果你想檢查自己的表現如何,如果你沒有找到足夠的在線內容,可以隨時要求更多的練習 - 簡單但關鍵的一些,例如“在現場反轉單個鏈接列表”或“從中刪除一個節點”給出指向該節點的指針的單鏈表“是經典的,但真正得到它們仍然是衡量指針問題的好方法。 (單個列表是困難但重要的指針練習的重要來源......這可能是仍然當前的C ++標准僅提供鏈表的原因的一部分,它們只是不會產生那么多“有趣”的問題! - ) 。

簡而言之 - 指針只是一種間接技術。 例如,不是直接(通過值)將數字傳遞給例程,而是可以只傳遞存儲數字的地址,以便需要它的例程可以在地址中查找。 現在這很有趣,因為擁有該地址的人可以更改存儲在該地址的值 - 該地址的所有其他持有者都可以看到該更改的結果。

在進行指針運算或指向函數的指針時,指針周圍可能會有很多混亂的語法,但如果你給自己一些時間來考慮它,那么指針的基本思想很簡單(並且可以使用幾個簡單的例子。)

祝好運,

保羅

我同意Duleb,只是寫一些代碼。

但是,為了幫助你理解,繪制出正在發生的事情,因為你可能有一個指針數組,你需要完成,所以你有指針指針。

通過繪制圖表,您可以看到正在發生的事情,過了一段時間,您可能會發現自己在腦海中繪制這些圖像,這將更有意義。

不幸的是,在你習慣使用它之前,指針可能是一個謎。 我認為只要讀一本書就不能真正理解如何使用它。

嘗試使用某種匯編語言。 這將真正,非常快地向您展示實際指針。

請記住,在它的核心,所有數據操作,所有數據結構,所有類型,只是移動位或在內存中跟蹤它們。

理解一個int數組只是一個內存塊,大小為1 int乘以數組中元素的數量,並意識到struct沒有一些魔術分隔符或代碼浮動在內存中保持成員變量分開,有助於你要記住(實現?)C編程的禪。

你想更好地學習指針嗎? 學習void指針。 它是沒有任何偏見的那個,最純粹的指針形式,並且考慮你可以從內存中的相同位實現的值。

最后都是煙霧和鏡子 - 忘掉你的硬類型 - 並記住內存中的各個部分。 指針比int或chars更少摻雜,而void指針是最純粹的指針。

我認為這是每個程序員都知道的事情,但很少有人意識到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM