頭文件的結(jié)構(gòu)體的定義為:
typedef struct
{
u8bmRequestType;
u8bRequest;
u16wValue;
u16wIndex;
u16wLength;
}USB_Request_Header_t;
雖然粉絲最后都理解了,但是仍想趁著這個(gè)機(jī)會(huì)整理一下結(jié)構(gòu)體的用法,希望能夠?qū)側(cè)胄械耐瑐冇兴鶐椭?/p>
結(jié)構(gòu)體
在實(shí)際的開(kāi)發(fā)過(guò)程中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型,此時(shí)數(shù)組是不能夠滿足需求了。因?yàn)閿?shù)組中各元素的類型必須是一致的。為了解決這個(gè)需求,C中給出了另一種數(shù)據(jù)類型-結(jié)構(gòu)體
,每一個(gè)成員可以是任意一種數(shù)據(jù)類型。
定義一個(gè)結(jié)構(gòu)體的類型為:
struct
結(jié)構(gòu)名{
成員列表
};
其中struct后面的叫做結(jié)構(gòu)體名
,而struct 結(jié)構(gòu)名
叫做結(jié)構(gòu)體類型,只有結(jié)構(gòu)體類型才可以定義變量,結(jié)構(gòu)體名是不能定義變量的。注意}
后面是需要加;
的。
struct
stu
{XXX};
stustu1;
//fail
struct stu
stu1
;
//true
三種結(jié)構(gòu)體類型變量說(shuō)明
結(jié)構(gòu)變量有以下三種方式:
1、先定義結(jié)構(gòu),再定義結(jié)構(gòu)變量
struct stu
{
int age;
};
struct stu stu1;
//定義了變量stu1
2、定義結(jié)構(gòu)體類型的同時(shí)說(shuō)明變量
struct
stu
{
int
age;
}stu1;
3、直接說(shuō)明結(jié)構(gòu)變量
struct
{
int
age;
}stu1;
這種方法和第一種方法相比,就是省略了結(jié)構(gòu)體名
,而省略的結(jié)構(gòu)體名,就無(wú)法組合結(jié)構(gòu)體類型了,而無(wú)這種結(jié)構(gòu)體類型,自然就不能再定義這種結(jié)構(gòu)體類型的變量了。
這種結(jié)構(gòu)體也被稱為匿名結(jié)構(gòu)體,即沒(méi)有結(jié)構(gòu)體名。匿名結(jié)構(gòu)體通常作為結(jié)構(gòu)體成員的一個(gè)變量去使用。如下:
struct
stu
{
int
age;
struct
{
int
month;
}birthday;
}stu1;
sut1.birthday.month=
10
;
//用法
結(jié)構(gòu)體成員表示方法
struct
stu
stu1
,*
pstu1
;
pstu1=&stu1;
stu1.age=
10
;
//true
(&stu1)->age=
10
;
//true
pstu1->age=
10
;
//true
(*pstu1).age=
10
;
//true
*pstu1.age=
10
;
//fail
如果對(duì)變量訪問(wèn)成員,則使用.
運(yùn)算符,如果是對(duì)指針訪問(wèn)成員則使用->
運(yùn)算符。
上例中除了最后一個(gè)都是對(duì)的。因?yàn)?code>.運(yùn)算符的優(yōu)先級(jí)高于*
,所以會(huì)先執(zhí)行pstu1.age
,而pstu1是一個(gè)指針,不可以使用.
運(yùn)算符去訪問(wèn),需要正確使用->
運(yùn)算符訪問(wèn)。所以最終會(huì)報(bào)錯(cuò)。
結(jié)構(gòu)體指針做參數(shù)
struct
stu
stu1
;
void
fun
(structstu*val);
fun(&stu1);
在這里也有新手誤解的地方,在函數(shù)入?yún)⑦@一塊,傳入的是一個(gè)指針,并不是說(shuō)外部一定要先定義一個(gè)指針變量struct stu *xxx
,然后把xxx
傳進(jìn)去。就像下面一樣。
struct
stu
stu1
;
struct
stu
*
p_stu1
=&
stu1
;
fun(p_stu1);
結(jié)構(gòu)體初始化
定義變量的同時(shí)初始化
struct
stu
{
int
age;
}stu1={
18
};
先定義在初始化
struct
stu
stu1
,
stu2
;
stu1.age=
18
;
stu2=stu1;
//結(jié)構(gòu)體之間可以直接賦值
常用初始化
在開(kāi)發(fā)過(guò)程中,一個(gè)結(jié)構(gòu)體之間會(huì)存在若干成員,極其復(fù)雜。這個(gè)時(shí)候通常是將成員全部清零,然后再對(duì)需要的成員進(jìn)行構(gòu)造。
struct
stu
stu1
;
memset
(&stu1,
0
,
sizeof
(stu1));
XXX_Init(&stu1.xxx);
-
指針
+關(guān)注
關(guān)注
1文章
482瀏覽量
70614 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
10875
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
C語(yǔ)言循環(huán)結(jié)構(gòu)的使用方法
![C語(yǔ)言循環(huán)<b class='flag-5'>結(jié)構(gòu)</b>的<b class='flag-5'>使用方法</b>](https://file1.elecfans.com/web2/M00/AD/D2/wKgZomVDFsmALW6sAAAq-JBY9Ms420.jpg)
C語(yǔ)言結(jié)構(gòu)體(struct)常見(jiàn)使用方法
結(jié)構(gòu)體和指針如何結(jié)合
如何使用struct kstat結(jié)構(gòu)體和vfs_stat()函數(shù)
使用結(jié)構(gòu)體的主要作用
振動(dòng)測(cè)試系統(tǒng)組成及基本儀器使用方法簡(jiǎn)介
結(jié)構(gòu)體變量的定義與使用變量訪問(wèn)結(jié)構(gòu)體成員
簡(jiǎn)單分析linux內(nèi)核中的結(jié)構(gòu)體使用方法
關(guān)于結(jié)構(gòu)體的基本知識(shí)匯總
鉗型表如何使用_鉗型表使用方法圖解大全
![鉗型表如何使用_鉗型表<b class='flag-5'>使用方法</b>圖解大全](https://file.elecfans.com/web1/M00/45/1E/pIYBAFpharGAbxPrAAC3cWuhDyI607.jpg)
面包板的結(jié)構(gòu)和使用方法詳細(xì)介紹
![面包板的<b class='flag-5'>結(jié)構(gòu)</b>和<b class='flag-5'>使用方法</b>詳細(xì)介紹](https://file.elecfans.com/web1/M00/69/EE/o4YBAFvZTBCAH2gxAAIz40Ktt7A072.png)
評(píng)論