C語言 結(jié)構(gòu)體類型的定義
結(jié)構(gòu)體類型與前面所講過的整型int、浮點型float—樣是一個數(shù)據(jù)類型,但是結(jié)構(gòu)體類型需要程序員根據(jù)自己的要求先定義,一旦一個結(jié)構(gòu)體類型定義好,可以用它來定義結(jié)構(gòu)體變量。定義結(jié)構(gòu)體類型的過程實際上相當于對上述學(xué)生信息表確定標題行的過程,所以結(jié)構(gòu)體類型實際上是一個模板。
結(jié)構(gòu)體類型的定義形式如下:
struct結(jié)構(gòu)體名]
{
類型標識符結(jié)構(gòu)體成員名1 ;
類型標識符結(jié)構(gòu)體成員名2 ;
…
類型標識符結(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)體類型的聲明,有幾點需要說明:
①結(jié)構(gòu)體名:結(jié)構(gòu)體類型的標識是一個合法的標識符,例如上面的student就是結(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òu)造類型,如結(jié)構(gòu)體、數(shù)組等。
③結(jié)構(gòu)體成員的定義方法與定義變量相同,其形式為:
類型標識符成員名;
④成員名的命名遵循標識符的命名規(guī)則。
⑤一個結(jié)構(gòu)體的成員也可以是另一個已經(jīng)定義好的結(jié)構(gòu)體類型。
例如:定義一個設(shè)備結(jié)構(gòu)體,包括以下信息:設(shè)備編號、設(shè)備名稱、設(shè)備購進日期、設(shè)備價格。
因為C語言中沒有日期型數(shù)據(jù)類型,所以日期型也可以定義成一個結(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)體類型的定義中,成員可以像上面一樣每行寫一個成員的定義,也可以將多個成員的定義寫在一行。例如,上述student的定義可寫成:
struct student
{
int sno; char sname[10]; int sage; char depmt[20]; float cscore;
};
點擊加載更多評論>>