中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C語言的指針和結構體怎么定義

發布時間:2022-03-22 16:02:58 來源:億速云 閱讀:321 作者:iii 欄目:互聯網科技

這篇文章主要介紹“C語言的指針和結構體怎么定義”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C語言的指針和結構體怎么定義”文章能幫助大家解決問題。

  指針和結構體

前面我們講述指針的時候,已經向大家介紹過使用指針去指向普通變量,指向函數,指向數組,指向字符串等操作,由于當時還沒有介紹結構體,因此是沒有講述指針指向結構體的。但是,指針作為C語言中最具有標志性的特征,指向結構體也是必定支持的,指向結構體的指針就是本小節要討論的結構體指針。

在討論結構體指針之前,我們先來定義一個結構體。定義這個結構體的步驟為,先用“typedef”關鍵詞聲明一個結構體的存儲類型。

typedef struct
{
char name[20];
int age;
int id_num;
} student_t;

接著,使用這個結構體類型去定義一個結構體變量,“student_t Xiaoming;”。

當這個描述小明信息的結構體變量被定義好之后,實際上編譯器會在內存上面開辟出一塊內存區域來存儲這個結構體變量,如圖1所示。

 C語言的指針和結構體怎么定義

圖1 結構體內存排放

當這個結構體內存被定義好之后,我們可以使用“Xiaoming.結構體成員名”的形式來訪問這個結構體內存的任意一個成員。那么這個結構體變量的名稱具體代表的是什么呢?我們可以使用printf函數將這個結構體變量名和內部各個成員變量的地址打印出來,如圖2所示。很顯然,結構體變量名的地址和結構體中第一個成員變量的首地址是保持一致的,因此我們可以推理出,結構體變量的名稱的地址就是代表著結構體首地址。

C語言的指針和結構體怎么定義

圖2 結構體變量名的地址和成員變量的地址

基于上面討論的內容,我們可以嘗試一下去定義一個指針,指向這個結構體。但是這個指針究竟應該定義什么類型的呢?前面我們講指針基礎的時候就說過,指向某個變量的指針,其數據類型應該和其指向的內容保持一致。那么指向這個結構體的指針難道我們要使用struct類型的指針,如“struct *pt”?

很顯然,這是錯誤的,因為我們之前討論過,為什么指向某個變量的指針,其數據類型應該和其指向的內容保持一致。其根本原因是因為要使得指針的增長和其內存保持一致的變化。因此,如果定義“struct *pt”這樣的指針,肯定是毫無意義的,語法上也肯定是不對的。

我們前面講結構體的時候也說過,struct關鍵詞用來申明結構體的時候,歸根到底聲明的其實是這個結構體的存儲類型,因此對于這個結構體,我們已經用typedef將其聲明為一個新的數據類型了,所以要定義的這個指針應該是“student_t *stu_pt;”。

現在指向這個結構體的指針已經被定義好了,那么接下來的內容就應該是如何指向這個結構體。按照我們之前的經驗,指向操作其實就是將指向對象的地址賦值給一個指針變量,因此這個指向操作就非常簡單了,“stu_pt = &Xiaoming”。如圖3所示。

C語言的指針和結構體怎么定義

圖3 定義指向結構體的指針

從圖3中我們可以看到,此時指針的內容和其指向的結構體的首地址是一樣的,因此我們可以初步判斷這個結構體指向操作是正確的。

現在我們已經了解了如何去定義一個結構體指針,以及如何去利用這個結構體指針去指向一個結構體,那么現在問題來了,我們定義結構體的初衷是為了是某幾個相關的變量有序地排列在一起,并且對這個結構體變量中的每一個成員都能引用,并且進行讀寫,而現在,我們定義好了一個結構體指針并且指向了一個結構體變量,那么我們能否使用這個結構體指針去引用其指向的那個結構體里面的成員變量呢?如果可以,那么該如何引用?

在回答這個問題之前,我們來回顧下,一個結構體變量其引用指針的時候,是使用“結構體變量名.成員變量名”的形式。那么對于一個結構體指針來說,這種結構體變量成員名稱的引用方式是不被允許的。對于一個指向結構體變量的結構體指針來說,我們應該使用指向符號“->”來引用這個結構體指針指向的結構體變量的成員變量。這一點一定要切記。

如,我們可以利用“student_t”類型定義一個結構體變量Xiaoming,接著再去使用一個結構體指針去指向這個變量。我們先對Xiaoming這個結構體變量里面的成員變量name賦值,接著使用結構體指針去讀出。然后再使用結構體指針對age變量賦值,接著再使用結構體變量去讀出,如圖4所示。

C語言的指針和結構體怎么定義

圖4 結構體指針訪問結構體變量

關于“C語言的指針和結構體怎么定義”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

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

AI

昌平区| 孟津县| 斗六市| 邳州市| 什邡市| 彭山县| 建湖县| 黄骅市| 鹿泉市| 山丹县| 云安县| 凤山县| 休宁县| 望奎县| 万全县| 长春市| 论坛| 定边县| 子洲县| 奉节县| 湖口县| 红桥区| 丰镇市| 同江市| 濮阳县| 来宾市| 武隆县| 北碚区| 扶沟县| 建始县| 梧州市| 冷水江市| 孝感市| 宣汉县| 大丰市| 高平市| 潞西市| 怀化市| 舟曲县| 临澧县| 关岭|