乾貨好文帶你理解C語言中的連結串列
首先,指標計算機中的所有內容都是數字。在C語言中建立變數時,編譯器僅按地址處理它,但是在您的程式碼中,您可以透過兩種方式訪問它:按值和按地址。
|
首先,指標計算機中的所有內容都是數字。在C語言中建立變數時,編譯器僅按地址處理它,但是在您的程式碼中,您可以透過兩種方式訪問它:按值和按地址。
在該程式碼中,我使用了三個變數,編譯器將透過地址訪問所有這些變數。
時間-全域性變數-儲存在堆中
skip- 引數-儲存在堆疊中
i- 區域性變數-儲存在堆疊中
“ Hello world-%d \ n”-儲存在堆中
堆是由編譯器與您的程式碼連結的啟動程式碼分配的記憶體塊。建立方式並不重要,但並非所有編譯器都一樣。那是我們想要得到的技術。
為簡化起見,假設變數Times 結束於記憶體位置256(0x100)。堆疊上的變數i 的位置為64(0x40)。文字“ Hello ...”的位置為200(0xc8)。最後,跳過會得到68(0x44)。
現在假設您像這樣呼叫function():
這是for迴圈開始時的內容:
時間-儲存在0x100-值為10
跳過-儲存在0x44-值2
i- 儲存在0x40-值0
未命名文字儲存在0xc8-值“ Hello world-%d \ n
現在定址非常簡單。在C語言世界中,當您使用不是指標的變數名時,編譯器會將其視為“儲存在地址中的值”。因此,當您使用變數skip時,編譯器將使用“儲存在0x44處的值”。該程式碼段中的所有變數均為“按值”,表示僅使用值。指標是變數的地址。假設我們這樣做:
現在,您有了一個名為TimesPtr 的變數。像所有其他變數一樣,它具有與之關聯的記憶體地址。但是透過將其定義為指標,您可以指定其值為記憶體地址。
因此,使用上述所有數字,我們還將新增
TimesPtr -儲存在地址260(ox104) -堆疊中的
數-儲存在地址263(量0x108) -在堆
我們已將TimePtr 分配為Times 的地址,即0x100。在迴圈開始時,我們指定i = 0,因此0儲存在0x40中。我們還分配Num ,它也是指向整數0的指標。編譯器將建立程式碼,0被放入量0x108,地址數。
當您使用'*'運算子時,您正在告訴編譯器使用您指定的變數“儲存在地址中的值”。當僅使用變數名時,您將告訴編譯器“儲存的值”。
順便說一句,在printf()呼叫中,將文字的地址傳遞給函式printf(),因為文字在編譯器中僅具有一個地址,而不是名稱(並且陣列透過地址傳遞,並且該文字是一個字元陣列) )。
建立連結串列最簡單的方法是簡單地將一個指標新增為指向該結構本身的結構成員。它是這樣完成的:
如果要使用typedef ,則不能使用typedef 名稱,因為它尚未定義。假設我們想將_student 結構引用為studentT 。程式碼如下所示:
現在,next將是列表中下一個節點的地址,如果沒有,則為NULL。
這是建立連結列表的最簡單方法。只需建立一個節點,將其下一個指標分配給列表地址,然後將列表頭分配給該節點的地址。在類中,您最好處理strdup(),並記住在刪除節點時將其釋放。
現在,您需要在單個連結串列中插入和刪除的操作。我將為您提供一個通用連結串列,以儲存任何資料型別:
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2730430/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C語言中編譯和連結C語言編譯
- 乾貨好文帶你認識WebRTC伺服器的常見架構Web伺服器架構
- C語言線性連結串列C語言
- C語言中continue的理解(fishing_1)C語言
- C語言單向連結串列的增刪操作C語言
- C語言中結構體感悟C語言結構體
- [連結串列]leetcode138-複製帶隨即指標的連結串列LeetCode指標
- 雙向連結串列介面設計(C語言)C語言
- 詳解雙向連結串列的基本操作(C語言)C語言
- 乾貨滿滿!!!面試必備OJ題:連結串列篇(一)面試
- 說說你對連結串列的理解?常見的操作有哪些?
- 關於動態連結串列的理解
- C++語言中std::array的神奇用法總結,你需要知道!C++
- 乾貨好文 | 初探MySQL遷移到ClickHouseMySql
- 資料結構_連結串列的原理與應用1_單連結串列(基於C語言實現)資料結構C語言
- [乾貨分享]1000篇乾貨好文!量子技術——進階篇
- [乾貨分享]1000篇乾貨好文!量子技術——資訊篇
- “c語言+結構體+連結串列”實現名片系統C語言結構體
- 用c語言實現資料結構——單連結串列C語言資料結構
- 資料結構——單連結串列介面實現(C語言)資料結構C語言
- C語言資料結構:雙向連結串列的增刪操作C語言資料結構
- c語言中的三種迴圈語句結構C語言
- C語言中的#和##C語言
- c語言單連結串列的實現,包括連結串列的建立、插入、查詢、刪除、列印、長度計算C語言
- 環形連結串列_相交連結串列_多數元素(java語言)Java
- C++ STL list連結串列C++
- c語言單向連結串列逆轉實現方法C語言
- 單向迴圈連結串列介面設計(C語言)C語言
- C語言中結構體直接賦值?C語言結構體賦值
- 乾貨分享 | C語言的聯合體C語言
- Go 語言 結構體連結串列Go結構體
- 你知道MySQL的LRU連結串列嗎?MySql
- 資料結構_連結串列_單向迴圈連結串列 & 雙向連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- 解析C語言中的sizeofC語言
- C語言中extern的用法C語言
- c語言中的作用域C語言
- [乾貨分享]1000篇乾貨好文!量子技術——專家觀點篇