C語言 結(jié)構(gòu)體類型的定義
結(jié)構(gòu)體類型與前面所講過的整型int、浮點(diǎn)型float—樣是一個(gè)數(shù)據(jù)類型,但是結(jié)構(gòu)體類型需要程序員根據(jù)自己的要求先定義,一旦一個(gè)結(jié)構(gòu)體類型定義好,可以用它來定義結(jié)構(gòu)體變量。定義結(jié)構(gòu)體類型的過程實(shí)際上相當(dāng)于對上述學(xué)生信息表確定標(biāo)題行的過程,所以結(jié)構(gòu)體類型實(shí)際上是一個(gè)模板。
結(jié)構(gòu)體類型的定義形式如下:
struct結(jié)構(gòu)體名]
{
類型標(biāo)識符結(jié)構(gòu)體成員名1 ;
類型標(biāo)識符結(jié)構(gòu)體成員名2 ;
…
類型標(biāo)識符結(jié)構(gòu)體成員名n ;
};
例如,定義學(xué)生結(jié)構(gòu)體的定義如下:
struct student
{
int sno; /*學(xué)號*/
char snarae[10]; /*姓名*/
int sage; /*年齡*/
char depmt [20]; /*專業(yè)*/
float cscore; /*成績*/
};
關(guān)于結(jié)構(gòu)體類型的聲明,有幾點(diǎn)需要說明:
①結(jié)構(gòu)體名:結(jié)構(gòu)體類型的標(biāo)識是一個(gè)合法的標(biāo)識符,例如上面的student就是結(jié)構(gòu)體名,有時(shí)也稱之為結(jié)構(gòu)體標(biāo)記。
②結(jié)構(gòu)體成員:結(jié)構(gòu)體的每一個(gè)成員代表了結(jié)構(gòu)體的一個(gè)分量,可以將每一個(gè)結(jié)構(gòu)體成員稱為結(jié)構(gòu)體中的域。結(jié)構(gòu)體成員名的形式和定義普通變量相同,結(jié)構(gòu)體成員可以是一個(gè)簡單類型,也可以是一個(gè)構(gòu)造類型,如結(jié)構(gòu)體、數(shù)組等。
③結(jié)構(gòu)體成員的定義方法與定義變量相同,其形式為:
類型標(biāo)識符成員名;
④成員名的命名遵循標(biāo)識符的命名規(guī)則。
⑤一個(gè)結(jié)構(gòu)體的成員也可以是另一個(gè)已經(jīng)定義好的結(jié)構(gòu)體類型。
例如:定義一個(gè)設(shè)備結(jié)構(gòu)體,包括以下信息:設(shè)備編號、設(shè)備名稱、設(shè)備購進(jìn)日期、設(shè)備價(jià)格。
因?yàn)镃語言中沒有日期型數(shù)據(jù)類型,所以日期型也可以定義成一個(gè)結(jié)構(gòu)體的形式:
struct device
{
int d_no;
char d_name[20];
struct date d_date; /*用日期結(jié)構(gòu)體類型定義成員*/
float s_price;
};
可以看到,device結(jié)構(gòu)體中的d_date;是用date結(jié)構(gòu)體類型定義的。而date結(jié)構(gòu)體類型應(yīng)該已經(jīng)在之前定義好:
struct date
{
int year;
int month;
int day;
};
⑥結(jié)構(gòu)體類型的定義中,成員可以像上面一樣每行寫一個(gè)成員的定義,也可以將多個(gè)成員的定義寫在一行。例如,上述student的定義可寫成:
struct student
{
int sno; char sname[10]; int sage; char depmt[20]; float cscore;
};
點(diǎn)擊加載更多評論>>