C語言-----結(jié)構(gòu)體-創(chuàng)新互聯(lián)

74?

目前累計(jì)服務(wù)客戶近1000家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹立企業(yè)形象,為客戶提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)公司始終以務(wù)實(shí)、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對(duì)領(lǐng)先技術(shù)的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究、對(duì)客戶形象的視覺傳遞、對(duì)應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

目錄

結(jié)構(gòu)體類型的設(shè)計(jì)

結(jié)構(gòu)體成員的訪問

結(jié)構(gòu)體變量和指針

結(jié)構(gòu)體的內(nèi)存大小

使用枚舉類型

聯(lián)合體類型



結(jié)構(gòu)體類型的設(shè)計(jì)

在c語言中,結(jié)構(gòu)體是一種數(shù)據(jù)類型。

結(jié)構(gòu)體的定義形式為

struct? ?結(jié)構(gòu)體名

{

成員列表(可以使基本數(shù)據(jù)類型,指針,數(shù)組或其他結(jié)構(gòu)類型);

};

例題:學(xué)生結(jié)構(gòu)體

struct student{//關(guān)鍵字struct是數(shù)據(jù)類型說明符,指出下面說明的是結(jié)構(gòu)體類型,,標(biāo)識(shí)符student是結(jié)構(gòu)體的類型名
char name;
int age;
char sex[4];
int id;
double score;
};//分號(hào)不可少

注意:結(jié)構(gòu)體是一種數(shù)據(jù)類型,市創(chuàng)建變量的模板,不占用內(nèi)存空間;結(jié)構(gòu)體變量才包含了實(shí)實(shí)在在的數(shù)據(jù),需要存儲(chǔ)空間。

結(jié)構(gòu)體成員的訪問

訪問格式:結(jié)構(gòu)體變量.成員名

printf("%s\n",stu.name);

結(jié)構(gòu)變量整體賦值三種情況

1)定義結(jié)構(gòu)體變量(用{}初始化)。

2)用已定義的結(jié)構(gòu)變量初始化。

3)結(jié)構(gòu)體類型相同的變量可以作為整體相互賦值。

其他情況只能對(duì)成員注意賦值。

在c語言中不能進(jìn)制轉(zhuǎn)換。

內(nèi)置類型能夠定義指針變量,結(jié)構(gòu)體類型也可以定義結(jié)構(gòu)體類型指針。

結(jié)構(gòu)體變量和指針

結(jié)構(gòu)體類型指針訪問成員的獲取和賦值形式:
(*p).成員名(.的優(yōu)先級(jí)高于*,(?p)兩邊的括號(hào)不能少)

p->成員名 (->是減號(hào)加大于號(hào),中間沒有空格,稱為指向符)

在對(duì)于結(jié)構(gòu)體成員數(shù)據(jù)修改時(shí)可以用strcpy函數(shù)

strcpy((*p).name,"lisi");
strcpy(p->name,"lisi");
結(jié)構(gòu)體的內(nèi)存大小

1.內(nèi)存大小的基本單位是字節(jié)(byte),理論上來講,可以從任意地址訪問變量,但是實(shí)際上, cup并非逐字節(jié)讀寫內(nèi)存,而是以2,4,或8的倍數(shù)的字節(jié)塊來讀寫內(nèi)存,因此就會(huì)對(duì)基本數(shù)據(jù)類型的地址作出一些限制,即它的地址必須是2,4或8的倍數(shù)。那么就要求各種數(shù)據(jù)類型按照一定的規(guī)則在空間上排列,這就是對(duì)齊。

2.由于不同平臺(tái)對(duì)齊方式可能不同,如此一來,同樣的結(jié)構(gòu)在不同的平臺(tái)其大小可能不同,在無意識(shí)的情況下,互相發(fā)送的數(shù)據(jù)可能出現(xiàn)錯(cuò)亂,甚至引發(fā)嚴(yán)重的問題。

指定對(duì)齊值

預(yù)處理指令#pragma pack(n)可以改變默認(rèn)對(duì)齊數(shù)。

#pragma pack(2)
struct B {//6
char c;//1+1
int i;//4
}
#pragma pack()
#pragma pack(4)
struct A{//16
int i;//4
char c;//1+1
B b;//6
char d;//1
}
#pragma pack()

3.由于存儲(chǔ)變量地址對(duì)齊的問題,計(jì)算結(jié)構(gòu)體大小的3條規(guī)則:
1)結(jié)構(gòu)體變量的首地址,必須是結(jié)構(gòu)體變量中的MIN(大基本數(shù)據(jù)類型成員所占字節(jié)數(shù),指定對(duì)齊方式)。
2)結(jié)構(gòu)體變量中的每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量,都是MIN(該成員數(shù)據(jù)類型成員所占字節(jié)數(shù),指定對(duì)齊方式)。
3)結(jié)構(gòu)體變量的總大小,為結(jié)構(gòu)體變量中MIN(大基本數(shù)據(jù)類型成員所占字節(jié)數(shù),指定對(duì)齊方式)。


使用枚舉類型

如果一個(gè)變量只有幾種可能的值,則可以定義為枚舉類型,所謂“枚舉”就是把可能的值一一列舉起來,變量的值只限于列舉出來的值得范圍內(nèi)。

使用枚舉類型的一般形式

enumerate【枚舉名】{枚舉元素列表};

例:

enum weekday{sun,mon,tue,wed,thu,fri,sat};//每一個(gè)枚舉元素都代表一個(gè)整數(shù),C語言編譯按定義時(shí)的順序默認(rèn)它們的值為0,1,2,3,4,5?。在上面的定義中, sun的值自動(dòng)設(shè)為0, mon的值為1,?, sat 的值為6。
enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}workday,weekend;//常量sun的值為7,mon的值為1,以后的順序加1,sat為6。
聯(lián)合體類型

一般結(jié)構(gòu)為

union? ?聯(lián)合體名

{

成員列表;

}變量列表;

例:兩種形式

union data
{ int i;
 char ch;
 flaoat f;
};
union data a,b,c;

union data
{ int i;
 char ch;
 flaoat f;
} a,b,c;//結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度是各成員占的內(nèi)存長(zhǎng)度之和。每個(gè)成員分別占有其自己的內(nèi)存單元。而共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度。例如,上面定義的“共用體”變量a,b,c各占4個(gè)字節(jié)(因?yàn)橐粋€(gè)float型變量占4個(gè)字節(jié)),而不是各占4+1+1=9個(gè)字節(jié)。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前標(biāo)題:C語言-----結(jié)構(gòu)體-創(chuàng)新互聯(lián)
URL鏈接:http://muchs.cn/article10/djiedo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷App設(shè)計(jì)、服務(wù)器托管、網(wǎng)站制作品牌網(wǎng)站建設(shè)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)