日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言结构体介绍及用法

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言结构体介绍及用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一,為什么要使用結構體??????
?????? 在語言中,為了表示一些復雜的數據, 而普通的基本變量類型無法滿足要求。
?????? 例如要定義1個學生類型, 學生有3個屬性 sid, name, age
?????? 那么在面向對象語言里(例如java),我們可以寫1個類

??????

Class Student {int sid;String name;int age;void inputStudent(){} void showStudent(){} }



? ? ? ?? 可以見到在類里面有屬性,有方法, 可以很好地表示了這個類型的結構。
???????? 而c語言不是面向對象語言, 折衷地,就可以使用結構體來表示復雜結構的類型。


二,什么是結構體
???????? 結構體是根據用戶實際需要自己定義的符合數據類型。
???????? 如上面那個例子。 我們可以定義1個student 的結構體

????????

struct Student{int sid;char name[10];int age;}; //分號不能省



???????? 可以看出,結構體里面只有屬性(c里面叫成員),而沒有方法的, 所以它描述事物沒有類那么全面, 但也有它的好處, 就是編譯程序的時候能以算法為核心..

?????????? 注意,結構體只是1個自定義的類型,而不是變量哦, 定義了1個新的結構體后,并沒有給它分配內存.,跟未實例化的類是差不多的。

????????? 我們可以寫個例子程序
?
??????? 輸出結果:


三,結構體的使用方法
???? 上面那個例子,我們定義了1個Student 結構體類型的變量st, 并給他賦值.
???? 但是通常情況下我們還會定義1個指針,, 因為我們定義1個名字叫st 的student 結構體類型變量時, 系統就會給這個變量st分配內存, 分配多少內存呢? 起碼需要int sid(4字節)>, char[10] (10字節),int age(4字節),就是18byte啊, 實際上還不只這個數。
???????
????? 所以我們每次處理這個變量,或者作為參數傳遞時,對應帶著至少18 k內存。

????? 所以我們可以定義1個指向student 類型的指針, 這個指針指向1個結構體的第1個地址, 無論對應的結構體多么復雜龐大。這個指針只需要4字節(32位)或8字節(64位)。

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????? 輸出結果
?

注意上面的例子,
我們定義1個指向結構體變量的指針時pst時,
給結構體成員賦值有兩種方法:
?? st.sid = xxxx;
?? pst->sid = xxxx;
這兩種語句是等價的, 因為pst->sid 等價于 (*pst).sid 等價與 st.sid
所以 pst->sid 就是表示指針pst 所指向結構體變量中的sid這個成員。

注意事項:
???? 結構體變量之間不能加減乘除, 但是可以互相賦值
????


4.普通結構體變量和結構體指針變量作為函數參數傳遞的問題。

?? 如下面這個例子:
?

輸出結果:


其中我定義了1個Student的結構體 st, 并將它的地址傳入函數sv 和 pv.
其實也可以看出, 這兩個函數sv 和 pv的功能恰恰就如同 本文開始的java class Student 中的兩個方法 inputStuent 和 ShowStudent 啊..

總結

以上是生活随笔為你收集整理的c语言结构体介绍及用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。