日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
C語(yǔ)言結(jié)構(gòu)體使用注意事項(xiàng)

結(jié)構(gòu)體是類(lèi)似于名片形式的數(shù)據(jù)集合體,可以把它理解為一種由用戶(hù)自定義的特殊的復(fù)合型的“數(shù)據(jù)類(lèi)型”,在這個(gè)復(fù)合型的“數(shù)據(jù)類(lèi)型”中可以包含多種基本數(shù)據(jù)類(lèi)型,我們可以把它作為一個(gè)整體來(lái)操作。

成都創(chuàng)新互聯(lián)專(zhuān)注于磐安企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開(kāi)發(fā)。磐安網(wǎng)站建設(shè)公司,為磐安等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

一、關(guān)于結(jié)構(gòu)體

在C語(yǔ)言中,結(jié)構(gòu)體(struct)指的是一種數(shù)據(jù)結(jié)構(gòu),是C語(yǔ)言中復(fù)合數(shù)據(jù)類(lèi)型(aggregate data type)的一類(lèi)。

結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體同時(shí)也是一些元素的集合,這些元素稱(chēng)為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類(lèi)型,成員一般用名字訪(fǎng)問(wèn)。

結(jié)構(gòu)體的定義如下所示:

struct tag { member-list } variable-list;

其中:

struct為結(jié)構(gòu)體關(guān)鍵字; tag為結(jié)構(gòu)體的標(biāo)志; member-list為結(jié)構(gòu)體成員列表,其必須列出其所有成員; variable-list為此結(jié)構(gòu)體聲明的變量。 在一般情況下:tag、member-list、variable-list這3部分至少要出現(xiàn)2個(gè)。

二、結(jié)構(gòu)體常規(guī)定義

不同的定義,應(yīng)用在不同場(chǎng)景,所以,我們編程時(shí)需要結(jié)合實(shí)際情況來(lái)定義結(jié)構(gòu)體。

方法1:

定義結(jié)構(gòu)體stu,此時(shí)結(jié)構(gòu)體相當(dāng)于一個(gè)類(lèi)型,比如int,如需使用此結(jié)構(gòu)體,方法同int.

struct stu
{
char aa;
short bb;
int cc;
};

struct stu stu1, stu2;
方法2:

定義結(jié)構(gòu)體stu同時(shí)定義需要使用的結(jié)構(gòu)體變量stu1, stu2。如后面再需要定義結(jié)構(gòu)體變量,方法同1.

struct stu
{
char aa;
short bb;
int cc;
}stu1, stu2;

struct stu stu3;
方法3:

定義結(jié)構(gòu)體時(shí),結(jié)構(gòu)體名稱(chēng)缺省,同時(shí)定義結(jié)構(gòu)體變量stu1,stu2。但后面不可再定義結(jié)構(gòu)體變量。

struct
{
char aa;
short bb;
int cc;
}stu1, stu2;
提示:

這里不能像上面再定義結(jié)構(gòu)體變量:(以下錯(cuò)誤)

struct stu3;
struct stu stu3;

三、使用typedef定義結(jié)構(gòu)體

這里先簡(jiǎn)單說(shuō)下typedef。

在C和C++編程語(yǔ)言中,typedef是一個(gè)關(guān)鍵字。它用來(lái)對(duì)一個(gè)數(shù)據(jù)類(lèi)型取一個(gè)別名,目的是為了使源代碼更易于閱讀和理解。它通常用于簡(jiǎn)化聲明復(fù)雜的類(lèi)型組成的結(jié)構(gòu) ,但它也常常在各種長(zhǎng)度的整數(shù)數(shù)據(jù)類(lèi)型中看到,例如size_t和time_t。 維基百科

方法4:

使用typedef定義結(jié)構(gòu)體同時(shí),給stu結(jié)構(gòu)體別名STU,后續(xù)定義可不用使用struct stu,直接使用STU即可。

typedef struct stu
{
char aa;
short bb;
int cc;
}STU;

STU stu1;

你會(huì)發(fā)現(xiàn),其實(shí)就是通過(guò)關(guān)鍵字typedef,將STU取代了struct stu。

當(dāng)然,也可以這么用:

struct stu stu1;

上面這種定義就失去了typedef的意思,所以不推薦。

方法5:

使用typedef定義結(jié)構(gòu)體時(shí),省掉結(jié)構(gòu)體第一個(gè)別名stu,直接在后面加STU,使用方法同上。

typedef struct
{
char aa;
short bb;
int cc;
}STU;

STU stu1;
方法6:

還有一種符合語(yǔ)法規(guī)則,但意義不大的定義方式。

typedef struct stu
{
char aa;
short bb;
int cc;
};

struct stu stu1;

以上這些定義方式算是語(yǔ)法的知識(shí),如果還不懂,請(qǐng)?jiān)俅螐?fù)習(xí)一下。

四、結(jié)構(gòu)體大小計(jì)算

結(jié)構(gòu)體的大小,我相信很多人都沒(méi)搞明白。實(shí)際編程中也是很多地方都在應(yīng)用,比如:存儲(chǔ)、拷貝結(jié)構(gòu)體時(shí)都會(huì)牽涉到結(jié)構(gòu)體大小的問(wèn)題。

1. 對(duì)比兩結(jié)構(gòu)體大小,一樣嗎?

結(jié)構(gòu)體1:

struct stu
{
char aa;
short bb;
char cc;
}stu1;
結(jié)構(gòu)體2:

struct stu
{
char aa;
char bb;
short cc;
}stu2;

答案是不一樣。程序測(cè)試得出sizeof(stu1)=6, sizeof(stu2)=4.

2. 分析不一樣原因

結(jié)構(gòu)體計(jì)算要遵循字節(jié)對(duì)齊原則,一般滿(mǎn)足三個(gè)準(zhǔn)則:

結(jié)構(gòu)體變量的首地址能夠被其最寬基本類(lèi)型成員的大小所整除; 結(jié)構(gòu)體每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量(offset)都是成員大小的整數(shù)倍,如有需要編譯器會(huì)在成員之間加上填充字節(jié); 結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類(lèi)型成員大小的整數(shù)倍,如有需要編譯器會(huì)在最末一個(gè)成員之后加上填充字節(jié); 對(duì)于上面結(jié)構(gòu)體stu1來(lái)說(shuō),最大字節(jié):2字節(jié),順序是 char->short->char:

對(duì)于上面結(jié)構(gòu)體stu2來(lái)說(shuō),最大字節(jié):2字節(jié),順序是 char->char->short:

通過(guò)上面兩個(gè)表格,相信你應(yīng)該明白了,改成4字節(jié)的int,原理一樣。

最后,強(qiáng)調(diào)一下,學(xué)習(xí)編程,不能只看書(shū),要多敲代碼。


網(wǎng)頁(yè)標(biāo)題:C語(yǔ)言結(jié)構(gòu)體使用注意事項(xiàng)
轉(zhuǎn)載來(lái)于:http://www.5511xx.com/article/ccsisdo.html