溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量

發(fā)布時間:2022-03-22 16:03:58 來源:億速云 閱讀:414 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容介紹了“C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

首先我們需要知道的就是,結(jié)構(gòu)體指針是可以作為一個結(jié)構(gòu)體類型的內(nèi)部成員變量的。假設我們有一個student_t結(jié)構(gòu)類型,其內(nèi)部是可以包含一個用其本身定義的一個結(jié)構(gòu)體變量的。如圖1所示。

 C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量
圖1在定義結(jié)構(gòu)體時,加入一個其自身類型的結(jié)構(gòu)體指針

如圖1所示,我們在使用typedef定義結(jié)構(gòu)體存儲類型的時候,可以將結(jié)構(gòu)體的標簽選項保留下來。這個標簽在定義指向這種類型的結(jié)構(gòu)體指針的時候,可以和struct聯(lián)合起來定義。
好了,我們現(xiàn)在已經(jīng)定義好了一個student_t類型的結(jié)構(gòu)體了,這個結(jié)構(gòu)體有一個最顯著的特點,就是它的成員變量里面包含了一個可以指向它自己(student_t)類型的結(jié)構(gòu)體指針。
這里就有個假設了。假設小明和小麗是一個班上的學生,我們可以分別定義兩個結(jié)構(gòu)體變量用來存放他們的名字和年齡,如圖2所示。

C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量
圖2 打印小明和小麗的信息

現(xiàn)在我們可以再想一下,如果我們要建立起來一個關(guān)系,即坐在小明后面的那個同學,她的名字叫做小麗,換句話說,就是能否找到一種關(guān)系,將小麗的信息通過小明這個同學去找到。答案是可以的,我們看到,用來描述小明的結(jié)構(gòu)體里面還包含了一個結(jié)構(gòu)體指針*next,由于用于描述小明和小麗的結(jié)構(gòu)體類型是完全一致的,因此*next指針是可以指向小麗結(jié)構(gòu)體的。如圖3所示。

C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量
圖3 next結(jié)構(gòu)體指針指向另一個結(jié)構(gòu)體變量

而這個指針的指向操作,我們可以使用代碼來實現(xiàn),只需要將XiaoLi結(jié)構(gòu)體的首地址賦值給Xiaoming.next即可。這樣操作之后,Xiaoming的next指針就指向了XiaoLi了,此時我們可以很簡單地通過小明去查詢到XiaoLi的相關(guān)信息。這里需要注意的是,Xiaoming.next是一個結(jié)構(gòu)體指針,因此在使用Xiaoming結(jié)構(gòu)體查詢XiaoLi的信息時,需要使用Xiaoming.next的指向操作,即Xiaoming.next->name,和Xiaoming.next->age。具體代碼如圖4所示。

C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量
圖4 利用next指針打印后一個結(jié)構(gòu)體變量的信息

現(xiàn)在我們再將這些信息擴大一些,假設Xiaoming和XiaoLi這個小組里面又加入了兩個小伙伴,分別叫做MaLi和JieKe。那我們也可以使用同樣的方式將MaLi和JieKe的信息存儲下來,并且使用next指針將他們的信息一個一個地“串聯(lián)起來”。如圖5所示。

C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量
圖5 利用小明打印出所有學生的信息

上述的printf函數(shù)在寫起程序來還是比較麻煩的,我們需要為這四個同學寫出四個不同的printf函數(shù),如果學生的數(shù)量到了100個,還要寫100個printf?那么有沒有辦法只寫出一個printf,就能將整個這種連接到一起的結(jié)構(gòu)體的信息都打印出來呢?答案又是肯定的,我們再來反觀一下現(xiàn)在這幾個結(jié)構(gòu)體的關(guān)系。如圖6所示。

C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量
圖6四個結(jié)構(gòu)體之間的關(guān)系

如果要可以滿足只用一句printf就可以將這四個或者以后的多個結(jié)構(gòu)體的信息全部打印出來,我們聯(lián)想到學習數(shù)組的時候,有一種被稱為數(shù)組遍歷的操作與之類似。我們仔細觀察這幾個結(jié)構(gòu)體,我們很容易找到一個判斷條件,最后一個結(jié)構(gòu)體的next指針勢必會指向NULL。因此利用這一點,我們可以定義一個student_t的結(jié)構(gòu)體指針seek,先指向第一個結(jié)構(gòu)體變量,輸出完成后,指向第二個結(jié)構(gòu)體變量,即將第一個的next指針賦給這個seek指針,以此類推。當最后一個next賦給seek指針的時候,seek指針的值勢必為NULL,因此可以退出整個循環(huán)。具體代碼如圖7所示。

C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量
圖7 seek指針變量這四個結(jié)構(gòu)體變量

“C語言怎么鏈接兩個孤單的結(jié)構(gòu)體變量”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI