頭文件的結(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í)際的開發(fā)過程中,一組數(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)體類型變量說明
結(jié)構(gòu)變量有以下三種方式:
1、先定義結(jié)構(gòu),再定義結(jié)構(gòu)變量
struct stu
{
int age;
};
struct stu stu1;
//定義了變量stu1
2、定義結(jié)構(gòu)體類型的同時(shí)說明變量
struct
stu
{
int
age;
}stu1;
3、直接說明結(jié)構(gòu)變量
struct
{
int
age;
}stu1;
這種方法和第一種方法相比,就是省略了結(jié)構(gòu)體名
,而省略的結(jié)構(gòu)體名,就無法組合結(jié)構(gòu)體類型了,而無這種結(jié)構(gòu)體類型,自然就不能再定義這種結(jié)構(gòu)體類型的變量了。
這種結(jié)構(gòu)體也被稱為匿名結(jié)構(gòu)體,即沒有結(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ì)變量訪問成員,則使用.
運(yùn)算符,如果是對(duì)指針訪問成員則使用->
運(yùn)算符。
上例中除了最后一個(gè)都是對(duì)的。因?yàn)?code>.運(yùn)算符的優(yōu)先級(jí)高于*
,所以會(huì)先執(zhí)行pstu1.age
,而pstu1是一個(gè)指針,不可以使用.
運(yùn)算符去訪問,需要正確使用->
運(yùn)算符訪問。所以最終會(huì)報(bào)錯(cuò)。
結(jié)構(gòu)體指針做參數(shù)
struct
stu
stu1
;
void
fun
(structstu*val);
fun(&stu1);
在這里也有新手誤解的地方,在函數(shù)入?yún)⑦@一塊,傳入的是一個(gè)指針,并不是說外部一定要先定義一個(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)體之間可以直接賦值
常用初始化
在開發(fā)過程中,一個(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文章
480瀏覽量
70585 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
10860
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論