這篇文章給大家介紹c語(yǔ)言中怎么自定義結(jié)構(gòu)體、位段、枚舉,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
為崇陽(yáng)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及崇陽(yáng)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站制作、崇陽(yáng)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!結(jié)構(gòu)體類型創(chuàng)建:
struct Stu
{ char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}stu1,stu2;
結(jié)構(gòu)體的自引用:
struct Node
{ int data;
struct Node* next;
};//用到指針
結(jié)構(gòu)體的初始化:(可以整體初始化,但不可以整體賦值)
struct Stu //類型聲明
{ char name[15];//名字
int age; //年齡
};
struct Stu s = {"zhangsan", 20};//初始化
(重點(diǎn))結(jié)構(gòu)體的內(nèi)存對(duì)齊:
首先得掌握結(jié)構(gòu)體的對(duì)齊規(guī)則: 1. 第一個(gè)成員在與結(jié)構(gòu)體變量偏移量為0的地址處。 2. 其他成員變量要對(duì)齊到某個(gè)數(shù)字(對(duì)齊數(shù))的整數(shù)倍的地址處。
結(jié)構(gòu)體總大小為大對(duì)齊數(shù)(每個(gè)成員變量都有一個(gè)對(duì)齊數(shù))的整數(shù)倍。 4. 如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對(duì)齊到自己的大對(duì)齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是 所有大對(duì)齊數(shù)(含嵌套結(jié)構(gòu)體的對(duì)齊數(shù))的整數(shù)倍。
為什么要內(nèi)存對(duì)齊:
平臺(tái)原因(移植原因): 不是所有的硬件平臺(tái)都能訪問(wèn)任意地址上的任意數(shù)據(jù)的;某些硬件平臺(tái)只能在某些地址 處取某些特定類型的數(shù)據(jù),否則拋出硬件異常
性能原因: 數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地在自然邊界上對(duì)齊。 原因在于,為了訪問(wèn)未對(duì)齊的內(nèi)存,處理 器需要作兩次內(nèi)存訪問(wèn);而對(duì)齊的內(nèi)存訪問(wèn)僅需要一次訪問(wèn)。
(用空間換取時(shí)間的做法)
結(jié)構(gòu)體傳參:
函數(shù)傳參的時(shí)候,參數(shù)是需要壓棧,會(huì)有時(shí)間和空間上的系統(tǒng)開銷。
如果傳遞一個(gè)結(jié)構(gòu)體對(duì)象的時(shí)候,結(jié)構(gòu)體過(guò)大,參數(shù)壓棧的的系統(tǒng)開銷比較大,所以會(huì)導(dǎo)致性能的下降。
結(jié)論: 結(jié)構(gòu)體傳參的時(shí)候,要傳結(jié)構(gòu)體的地址。
位段:(可以調(diào)整結(jié)構(gòu)體大?。?br/>1.位段的成員必須是 int、unsigned int 或signed int 或者char。
2.位段的成員名后邊有一個(gè)冒號(hào)和和一個(gè)數(shù)字。
struct A
{ int _a:2; //數(shù)字表示占的bit位數(shù)
int _b:5;
int _c:10;
int _d:30;
};
位段的內(nèi)存分配
位段的成員可以是 int unsigned int signed int 或者是 char (屬于×××家族)類型 2. 位段的空間上是按照需要以4個(gè)字節(jié)( int )或者1個(gè)字節(jié)( char )的方式來(lái)開辟的。 3. 位段涉及很多不確定因素,位段是不跨平臺(tái)的,注重可移植的程序應(yīng)該避免使用位段。
位段大小:
. 當(dāng)一個(gè)結(jié)構(gòu)包含兩個(gè)位段,第二個(gè)位段成員比較大,無(wú)法容納于第一個(gè)位段剩余的位時(shí),是舍棄剩余的 位還是利用,這是不確定的。(如果后面空間足夠直接后補(bǔ),如果不夠,另外尋找一片足夠的空間)(返回的是新地址的首地址)
枚舉:
enum Day//星期
{ Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
這些可能取值都是有值的,默認(rèn)從0開始,一次遞增1,當(dāng)然在定義的時(shí)候也可以賦初值。 只能枚舉常量賦給枚舉變量??梢灾苯訌?fù)制。值間斷遞增。
枚舉大小:
加在一起
聯(lián)合:
聯(lián)合也是一種特殊的自定義類型 這種類型定義的變量也包含一系列的成員,特征是這些成員公用同一塊空間(所以 聯(lián)合也叫共用體)。
union Un2
{ short c[7];
int i;
};
聯(lián)合大小:
聯(lián)合的大小至少是大成員的大小。 當(dāng)大成員大小不是大對(duì)齊數(shù)的整數(shù)倍的時(shí)候,就要對(duì)齊到大對(duì)齊數(shù)的整數(shù)倍。
關(guān)于c語(yǔ)言中怎么自定義結(jié)構(gòu)體、位段、枚舉就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站標(biāo)題:c語(yǔ)言中怎么自定義結(jié)構(gòu)體、位段、枚舉-創(chuàng)新互聯(lián)
文章鏈接:http://aaarwkj.com/article10/pgigo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站改版、品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、做網(wǎng)站、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容