亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言 結構體(Struct)詳解及示例代碼

2020-01-26 14:27:36
字體:
來源:轉載
供稿:網友

前面的教程中我們講解了數組(Array),它是一組具有相同類型的數據的集合。但在實際的編程過程中,我們往往還需要一組類型不同的數據,例如對于學生信息登記表,姓名為字符串,學號為整數,年齡為整數,所在的學習小組為字符,成績為小數,因為數據類型不同,顯然不能用一個數組來存放。

在C語言中,可以使用結構體(Struct)來存放一組不同類型的數據。結構體的定義形式為:

struct 結構體名{
    結構體所包含的變量或數組
};

結構體是一種集合,它里面包含了多個變量或數組,它們的類型可以相同,也可以不同,每個這樣的變量或數組都稱為結構體的成員(Member)。請看下面的一個例子:

struct stu{  char *name; //姓名  int num; //學號  int age; //年齡  char group; //所在學習小組  float score; //成績};

stu 為結構體名,它包含了 5 個成員,分別是 name、num、age、group、score。結構體成員的定義方式與變量和數組的定義方式相同,只是不能初始化。

注意大括號后面的分號;不能少,這是一條完整的語句。

結構體也是一種數據類型,它由程序員自己定義,可以包含多個其他類型的數據。

像 int、float、char 等是由C語言本身提供的數據類型,不能再進行分拆,我們稱之為基本數據類型;而結構體可以包含多個基本類型的數據,也可以包含其他的結構體,我們將它稱為復雜數據類型或構造數據類型。

結構體變量

既然結構體是一種數據類型,那么就可以用它來定義變量。例如:

struct stu stu1, stu2;

定義了兩個變量 stu1 和 stu2,它們都是 stu 類型,都由 5 個成員組成。注意關鍵字struct不能少。

stu 就像一個“模板”,定義出來的變量都具有相同的性質。也可以將結構體比作“圖紙”,將結構體變量比作“零件”,根據同一張圖紙生產出來的零件的特性都是一樣的。

你也可以在定義結構體的同時定義結構體變量:

將變量放在結構體定義的最后即可。

struct stu{  char *name; //姓名  int num; //學號  int age; //年齡  char group; //所在學習小組  float score; //成績} stu1, stu2;

如果只需要 stu1、stu2 兩個變量,后面不需要再使用結構體名定義其他變量,那么在定義時也可以不給出結構體名,如下所示:

struct{ //沒有寫 stu  char *name; //姓名  int num; //學號  int age; //年齡  char group; //所在學習小組  float score; //成績} stu1, stu2;

這樣做書寫簡單,但是因為沒有結構體名,后面就沒法用該結構體定義新的變量。

理論上講結構體的各個成員在內存中是連續存儲的,和數組非常類似,例如上面的結構體變量 stu1、stu2 的內存分布如下圖所示,共占用 4+4+4+1+4 = 17 個字節。

但是在編譯器的具體實現中,各個成員之間可能會存在縫隙,對于 stu1、stu2,成員變量 group 和 score 之間就存在 3 個字節的空白填充(見下圖)。這樣算來,stu1、stu2 其實占用了 17 + 3 = 20 個字節。

關于成員變量之間存在“裂縫”的原因,我們將在《C語言和內存》專題中的《C語言內存對齊,提高尋址效率》一節中詳細講解。

成員的獲取和賦值

結構體和數組類似,也是一組數據的集合,整體使用沒有太大的意義。數組使用下標[ ]獲取單個元素,結構體使用點號.獲取單個成員。獲取結構體成員的一般格式為:

結構體變量名.成員名;

通過這種方式可以獲取成員的值,也可以給成員賦值:

#include <stdio.h>int main(){  struct{    char *name; //姓名    int num; //學號    int age; //年齡    char group; //所在小組    float score; //成績  } stu1;  //給結構體成員賦值  stu1.name = "Tom";  stu1.num = 12;  stu1.age = 18;  stu1.group = 'A';  stu1.score = 136.5;  //讀取結構體成員的值  printf("%s的學號是%d,年齡是%d,在%c組,今年的成績是%.1f!/n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);  return 0;}

運行結果:

Tom的學號是12,年齡是18,在A組,今年的成績是136.5!

除了可以對成員進行逐一賦值,也可以在定義時整體賦值,例如:

struct{  char *name; //姓名  int num; //學號  int age; //年齡  char group; //所在小組  float score; //成績} stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };

不過整體賦值僅限于定義結構體變量的時候,在使用過程中只能對成員逐一賦值,這和數組的賦值非常類似。

需要注意的是,結構體是一種自定義的數據類型,是創建變量的模板,不占用內存空間;結構體變量才包含了實實在在的數據,需要內存空間來存儲。

以上就是對 C語言結構體資料的整理,后續繼續補充相關資料,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲性夜色噜噜噜7777| 国产成人久久久| 4438全国成人免费| 日韩综合视频在线观看| 国产精品久久久久久久久久久久久久| 欲色天天网综合久久| 综合国产在线视频| 欧美在线视频在线播放完整版免费观看| 亚洲xxxx做受欧美| 日韩中文字幕不卡视频| 亚洲综合日韩中文字幕v在线| 亚洲高清久久久久久| 色午夜这里只有精品| 综合欧美国产视频二区| 777午夜精品福利在线观看| 国产亚洲美女久久| 国产在线视频91| 国产精品三级网站| 国产成人精品免费久久久久| 国产精品国产福利国产秒拍| 亚洲aa中文字幕| 超碰97人人做人人爱少妇| 日韩av免费网站| 日韩电影大片中文字幕| 日本19禁啪啪免费观看www| 久久精品91久久香蕉加勒比| 欧美高清在线视频观看不卡| 国产精品精品视频一区二区三区| 日本欧美国产在线| 国产精品电影在线观看| 亚洲精品福利视频| 亚洲精品中文字幕有码专区| 国产日韩精品在线播放| 欧美视频在线视频| 中文字幕欧美日韩在线| 欧美成人精品一区二区| 国产亚洲精品久久久优势| 久久久亚洲福利精品午夜| 久久99热精品| 77777亚洲午夜久久多人| 国产精品99久久久久久www| 国产精品私拍pans大尺度在线| 日韩av高清不卡| 精品香蕉在线观看视频一| 国产一区二区三区网站| 亚洲自拍偷拍福利| 国产精品欧美一区二区| 日本精品免费一区二区三区| 国产精品v日韩精品| 亚洲性生活视频在线观看| 国产亚洲日本欧美韩国| 亚洲一区二区三区xxx视频| 久久久久久久999| 亚洲天堂网站在线观看视频| 亚洲欧美另类中文字幕| 亚洲精品影视在线观看| 激情懂色av一区av二区av| 国产成人a亚洲精品| 九九热r在线视频精品| 国产日产亚洲精品| 狠狠躁18三区二区一区| 国产精品999999| 亚洲欧洲午夜一线一品| 久久久女人电视剧免费播放下载| 久久亚洲春色中文字幕| 九九视频这里只有精品| 亚洲精品黄网在线观看| 欧美激情一区二区三区在线视频观看| 91久久精品国产91性色| 亚洲va码欧洲m码| 精品中文字幕在线观看| 欧美亚洲日本黄色| 欧美成人高清视频| 成人欧美在线观看| 清纯唯美亚洲激情| 亚洲r级在线观看| 欧美性xxxx极品hd满灌| 欧美肥臀大乳一区二区免费视频| 日韩精品高清在线观看| 91超碰caoporn97人人| 国产精品福利观看| 国产成人小视频在线观看| 亚洲第一精品久久忘忧草社区| 亚洲国产小视频在线观看| 国产日韩在线免费| 日本精品久久中文字幕佐佐木| 91精品久久久久久久久久| 久久久亚洲国产| 91精品久久久久久久久中文字幕| 亚洲国产成人精品电影| 久久久久久亚洲精品不卡| 日韩激情片免费| 97国产精品免费视频| 欧美一乱一性一交一视频| 亚洲视频自拍偷拍| 亚洲影视中文字幕| 97香蕉久久超级碰碰高清版| 国产精品成人免费电影| 92看片淫黄大片欧美看国产片| 国产精品ⅴa在线观看h| 成人性生交大片免费观看嘿嘿视频| 欧美极品少妇与黑人| 国产主播欧美精品| 91久久精品美女| 欧美精品免费播放| 国产成人精品免费视频| 日韩毛片在线观看| 久久久久久久久久av| 国产精品美女主播在线观看纯欲| 性视频1819p久久| 亚洲欧美第一页| 国产精品福利小视频| 亚洲第一精品电影| 精品久久久在线观看| 中文字幕在线国产精品| 精品国产网站地址| 欧美日韩一区二区三区在线免费观看| 国产精品青草久久久久福利99| 久久免费视频在线| 国产一区二区三区三区在线观看| 精品久久久久久久久久国产| 青青精品视频播放| 国产欧美精品一区二区| 亚洲精品一区中文字幕乱码| 国产盗摄xxxx视频xxx69| 国产精品久久91| 国产欧美日韩亚洲精品| 国产精品成人一区二区| 国产精品自产拍高潮在线观看| 日本高清久久天堂| 日韩电影在线观看中文字幕| 久久伊人免费视频| 国产精品男女猛烈高潮激情| 亚洲xxxx做受欧美| 久久精品亚洲国产| 欧美激情伊人电影| 国产美女精品免费电影| 一区二区三区视频免费在线观看| 97超级碰碰碰| 中文字幕在线观看日韩| 日韩中文字幕视频在线观看| 国产精品jvid在线观看蜜臀| 国产欧美久久一区二区| 国产精品久久综合av爱欲tv| 亚洲电影在线观看| 欧美日韩亚洲成人| 亚洲精品久久久久中文字幕二区| 97精品国产97久久久久久| 国产精品久久久久久搜索| 欧美巨大黑人极品精男| 日韩在线免费观看视频| 超在线视频97| 日韩专区在线观看| 成人久久久久爱| 日韩精品视频中文在线观看| 91中文字幕在线| 亚洲欧美国产高清va在线播| 国产精品精品久久久| 91久久久亚洲精品| 日韩av片永久免费网站| 4444欧美成人kkkk| 国产福利精品av综合导导航| www.亚洲成人| 国模视频一区二区|