本篇內(nèi)容介紹了“C語(yǔ)言怎么鏈接兩個(gè)孤單的結(jié)構(gòu)體變量”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站公司2013年成立,先為泰山等服務(wù)建站,泰山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為泰山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
首先我們需要知道的就是,結(jié)構(gòu)體指針是可以作為一個(gè)結(jié)構(gòu)體類(lèi)型的內(nèi)部成員變量的。假設(shè)我們有一個(gè)student_t結(jié)構(gòu)類(lèi)型,其內(nèi)部是可以包含一個(gè)用其本身定義的一個(gè)結(jié)構(gòu)體變量的。如圖1所示。
圖1在定義結(jié)構(gòu)體時(shí),加入一個(gè)其自身類(lèi)型的結(jié)構(gòu)體指針如圖1所示,我們?cè)谑褂胻ypedef定義結(jié)構(gòu)體存儲(chǔ)類(lèi)型的時(shí)候,可以將結(jié)構(gòu)體的標(biāo)簽選項(xiàng)保留下來(lái)。這個(gè)標(biāo)簽在定義指向這種類(lèi)型的結(jié)構(gòu)體指針的時(shí)候,可以和struct聯(lián)合起來(lái)定義。好了,我們現(xiàn)在已經(jīng)定義好了一個(gè)student_t類(lèi)型的結(jié)構(gòu)體了,這個(gè)結(jié)構(gòu)體有一個(gè)最顯著的特點(diǎn),就是它的成員變量里面包含了一個(gè)可以指向它自己(student_t)類(lèi)型的結(jié)構(gòu)體指針。這里就有個(gè)假設(shè)了。假設(shè)小明和小麗是一個(gè)班上的學(xué)生,我們可以分別定義兩個(gè)結(jié)構(gòu)體變量用來(lái)存放他們的名字和年齡,如圖2所示。現(xiàn)在我們可以再想一下,如果我們要建立起來(lái)一個(gè)關(guān)系,即坐在小明后面的那個(gè)同學(xué),她的名字叫做小麗,換句話說(shuō),就是能否找到一種關(guān)系,將小麗的信息通過(guò)小明這個(gè)同學(xué)去找到。答案是可以的,我們看到,用來(lái)描述小明的結(jié)構(gòu)體里面還包含了一個(gè)結(jié)構(gòu)體指針*next,由于用于描述小明和小麗的結(jié)構(gòu)體類(lèi)型是完全一致的,因此*next指針是可以指向小麗結(jié)構(gòu)體的。如圖3所示。圖3 next結(jié)構(gòu)體指針指向另一個(gè)結(jié)構(gòu)體變量而這個(gè)指針的指向操作,我們可以使用代碼來(lái)實(shí)現(xiàn),只需要將XiaoLi結(jié)構(gòu)體的首地址賦值給Xiaoming.next即可。這樣操作之后,Xiaoming的next指針就指向了XiaoLi了,此時(shí)我們可以很簡(jiǎn)單地通過(guò)小明去查詢到XiaoLi的相關(guān)信息。這里需要注意的是,Xiaoming.next是一個(gè)結(jié)構(gòu)體指針,因此在使用Xiaoming結(jié)構(gòu)體查詢XiaoLi的信息時(shí),需要使用Xiaoming.next的指向操作,即Xiaoming.next->name,和Xiaoming.next->age。具體代碼如圖4所示。圖4 利用next指針打印后一個(gè)結(jié)構(gòu)體變量的信息現(xiàn)在我們?cè)賹⑦@些信息擴(kuò)大一些,假設(shè)Xiaoming和XiaoLi這個(gè)小組里面又加入了兩個(gè)小伙伴,分別叫做MaLi和JieKe。那我們也可以使用同樣的方式將MaLi和JieKe的信息存儲(chǔ)下來(lái),并且使用next指針將他們的信息一個(gè)一個(gè)地“串聯(lián)起來(lái)”。如圖5所示。上述的printf函數(shù)在寫(xiě)起程序來(lái)還是比較麻煩的,我們需要為這四個(gè)同學(xué)寫(xiě)出四個(gè)不同的printf函數(shù),如果學(xué)生的數(shù)量到了100個(gè),還要寫(xiě)100個(gè)printf?那么有沒(méi)有辦法只寫(xiě)出一個(gè)printf,就能將整個(gè)這種連接到一起的結(jié)構(gòu)體的信息都打印出來(lái)呢?答案又是肯定的,我們?cè)賮?lái)反觀一下現(xiàn)在這幾個(gè)結(jié)構(gòu)體的關(guān)系。如圖6所示。圖6四個(gè)結(jié)構(gòu)體之間的關(guān)系如果要可以滿足只用一句printf就可以將這四個(gè)或者以后的多個(gè)結(jié)構(gòu)體的信息全部打印出來(lái),我們聯(lián)想到學(xué)習(xí)數(shù)組的時(shí)候,有一種被稱為數(shù)組遍歷的操作與之類(lèi)似。我們仔細(xì)觀察這幾個(gè)結(jié)構(gòu)體,我們很容易找到一個(gè)判斷條件,最后一個(gè)結(jié)構(gòu)體的next指針勢(shì)必會(huì)指向NULL。因此利用這一點(diǎn),我們可以定義一個(gè)student_t的結(jié)構(gòu)體指針seek,先指向第一個(gè)結(jié)構(gòu)體變量,輸出完成后,指向第二個(gè)結(jié)構(gòu)體變量,即將第一個(gè)的next指針賦給這個(gè)seek指針,以此類(lèi)推。當(dāng)最后一個(gè)next賦給seek指針的時(shí)候,seek指針的值勢(shì)必為NULL,因此可以退出整個(gè)循環(huán)。具體代碼如圖7所示。圖7 seek指針變量這四個(gè)結(jié)構(gòu)體變量“C語(yǔ)言怎么鏈接兩個(gè)孤單的結(jié)構(gòu)體變量”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
文章題目:C語(yǔ)言怎么鏈接兩個(gè)孤單的結(jié)構(gòu)體變量
瀏覽地址:
http://fisionsoft.com.cn/article/gsgsoo.html