- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) >
- C語(yǔ)言中結構體如何使用
今天就跟大家聊聊有關(guān)C語(yǔ)言中結構體如何使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
一、關(guān)于結構體
在C語(yǔ)言中,結構體(struct)指的是一種數據結構,是C語(yǔ)言中復合數據類(lèi)型(aggregate data type)的一類(lèi)。
結構體可以被聲明為變量、指針或數組等,用以實(shí)現較復雜的數據結構。結構體同時(shí)也是一些元素的集合,這些元素稱(chēng)為結構體的成員(member),且這些成員可以為不同的類(lèi)型,成員一般用名字訪(fǎng)問(wèn)。
結構體的定義如下所示:
struct tag { member-list } variable-list;
其中:
struct為結構體關(guān)鍵字;
tag為結構體的標志;
member-list為結構體成員列表,其必須列出其所有成員;
variable-list為此結構體聲明的變量。
在一般情況下:tag、member-list、variable-list這3部分至少要出現2個(gè)。
二、結構體常規定義
不同的定義,應用在不同場(chǎng)景,所以,我們編程時(shí)需要結合實(shí)際情況來(lái)定義結構體。
方法1:
定義結構體stu,此時(shí)結構體相當于一個(gè)類(lèi)型,比如int,如需使用此結構體,方法同int.
struct stu { char aa; short bb; int cc; }; struct stu stu1, stu2;
方法2:
定義結構體stu同時(shí)定義需要使用的結構體變量stu1, stu2。如后面再需要定義結構體變量,方法同1.
struct stu { char aa; short bb; int cc; }stu1, stu2; struct stu stu3;
方法3:
定義結構體時(shí),結構體名稱(chēng)缺省,同時(shí)定義結構體變量stu1,stu2。但后面不可再定義結構體變量。
struct { char aa; short bb; int cc; }stu1, stu2;
提示:
這里不能像上面再定義結構體變量:(以下錯誤)
struct stu3; struct stu stu3;
三、使用typedef定義結構體
這里先簡(jiǎn)單說(shuō)下typedef。
方法4:
使用typedef定義結構體同時(shí),給stu結構體別名STU,后續定義可不用使用struct stu,直接使用STU即可。
typedef struct stu { char aa; short bb; int cc; }STU; STU stu1;
你會(huì )發(fā)現,其實(shí)就是通過(guò)關(guān)鍵字typedef,將STU取代了struct stu。
當然,也可以這么用:
struct stu stu1;
上面這種定義就失去了typedef的意思,所以不推薦。
方法5:
使用typedef定義結構體時(shí),省掉結構體第一個(gè)別名stu,直接在后面加STU,使用方法同上。
typedef struct { char aa; short bb; int cc; }STU; STU stu1;
方法6:
還有一種符合語(yǔ)法規則,但意義不大的定義方式。
typedef struct stu { char aa; short bb; int cc; }; struct stu stu1;
以上這些定義方式算是語(yǔ)法的知識,如果還不懂,請再次復習一下。
四、結構體大小計算
結構體的大小,我相信很多人都沒(méi)搞明白。實(shí)際編程中也是很多地方都在應用,比如:存儲、拷貝結構體時(shí)都會(huì )牽涉到結構體大小的問(wèn)題。
1. 對比兩結構體大小,一樣嗎?
結構體1:
struct stu { char aa; short bb; char cc; }stu1;
結構體2:
struct stu { char aa; char bb; short cc; }stu2;
答案是不一樣。程序測試得出sizeof(stu1)=6, sizeof(stu2)=4.
2. 分析不一樣原因
結構體計算要遵循字節對齊原則,一般滿(mǎn)足三個(gè)準則:
結構體變量的首地址能夠被其最寬基本類(lèi)型成員的大小所整除;
結構體每個(gè)成員相對于結構體首地址的偏移量(offset)都是成員大小的整數倍,如有需要編譯器會(huì )在成員之間加上填充字節;
結構體的總大小為結構體最寬基本類(lèi)型成員大小的整數倍,如有需要編譯器會(huì )在最末一個(gè)成員之后加上填充字節;
對于上面結構體stu1來(lái)說(shuō),最大字節:2字節,順序是 char->short->char:
對于上面結構體stu2來(lái)說(shuō),最大字節:2字節,順序是 char->char->short:
通過(guò)上面兩個(gè)表格,相信你應該明白了,改成4字節的int,原理一樣。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2 建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站