您好,登錄后才能下訂單哦!
C語言中鏈表的作用是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
首先,指針計算機(jī)中的所有內(nèi)容都是數(shù)字。在C語言中創(chuàng)建變量時,編譯器僅按地址處理它,但是在您的代碼中,您可以通過兩種方式訪問它:按值和按地址。
在該代碼中,我使用了三個變量,編譯器將通過地址訪問所有這些變量。
時間-全局變量-存儲在堆中
skip- 參數(shù)-存儲在堆棧中
i- 局部變量-存儲在堆棧中
“ Hello world-%d \ n”-存儲在堆中
堆是由編譯器與您的代碼鏈接的啟動代碼分配的內(nèi)存塊。創(chuàng)建方式并不重要,但并非所有編譯器都一樣。那是我們想要得到的技術(shù)。
為簡化起見,假設(shè)變量Times 結(jié)束于內(nèi)存位置256(0x100)。堆棧上的變量i 的位置為64(0x40)。文字“ Hello ...”的位置為200(0xc8)。最后,跳過會得到68(0x44)。
現(xiàn)在假設(shè)您像這樣調(diào)用function():
這是for循環(huán)開始時的內(nèi)容:
時間-存儲在0x100-值為10
跳過-存儲在0x44-值2
i- 存儲在0x40-值0
未命名文字存儲在0xc8-值“ Hello world-%d \ n
現(xiàn)在尋址非常簡單。在C語言世界中,當(dāng)您使用不是指針的變量名時,編譯器會將其視為“存儲在地址中的值”。因此,當(dāng)您使用變量skip時,編譯器將使用“存儲在0x44處的值”。該代碼段中的所有變量均為“按值”,表示僅使用值。指針是變量的地址。假設(shè)我們這樣做:
現(xiàn)在,您有了一個名為TimesPtr 的變量。像所有其他變量一樣,它具有與之關(guān)聯(lián)的內(nèi)存地址。但是通過將其定義為指針,您可以指定其值為內(nèi)存地址。
因此,使用上述所有數(shù)字,我們還將添加
TimesPtr -存儲在地址260(ox104) -堆棧中的
數(shù)-存儲在地址263(量0x108) -在堆
我們已將TimePtr 分配為Times 的地址,即0x100。在循環(huán)開始時,我們指定i = 0,因此0存儲在0x40中。我們還分配Num ,它也是指向整數(shù)0的指針。編譯器將創(chuàng)建代碼,0被放入量0x108,地址數(shù)。
當(dāng)您使用'*'運(yùn)算符時,您正在告訴編譯器使用您指定的變量“存儲在地址中的值”。當(dāng)僅使用變量名時,您將告訴編譯器“存儲的值”。
順便說一句,在printf()調(diào)用中,將文字的地址傳遞給函數(shù)printf(),因?yàn)槲淖衷诰幾g器中僅具有一個地址,而不是名稱(并且數(shù)組通過地址傳遞,并且該文字是一個字符數(shù)組) )。
創(chuàng)建鏈表最簡單的方法是簡單地將一個指針添加為指向該結(jié)構(gòu)本身的結(jié)構(gòu)成員。它是這樣完成的:
如果要使用typedef ,則不能使用typedef 名稱,因?yàn)樗形炊x。假設(shè)我們想將_student 結(jié)構(gòu)引用為studentT 。代碼如下所示:
現(xiàn)在,next將是列表中下一個節(jié)點(diǎn)的地址,如果沒有,則為NULL。
這是創(chuàng)建鏈接列表的最簡單方法。只需創(chuàng)建一個節(jié)點(diǎn),將其下一個指針分配給列表地址,然后將列表頭分配給該節(jié)點(diǎn)的地址。在類中,您最好處理strdup(),并記住在刪除節(jié)點(diǎn)時將其釋放。
現(xiàn)在,您需要在單個鏈表中插入和刪除的操作。我將為您提供一個通用鏈表,以保存任何數(shù)據(jù)類型:
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。