C語言 結(jié)構(gòu)體變量的定義
定義結(jié)構(gòu)體變量的方法有三種:
(1)先定義結(jié)構(gòu)體類型再定義結(jié)構(gòu)體變量
結(jié)構(gòu)體變量的定義形式為:
struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量名;
例如:
struct student stul,stu2;
定義了兩個(gè)student結(jié)構(gòu)體型變量,變量名分別為stul, stu2。像簡單變量一樣,定義了結(jié)構(gòu)體變量后,系統(tǒng)會為之分配內(nèi)存空間,結(jié)構(gòu)體變量的各個(gè)成員在內(nèi)存中是連續(xù)存放的。student結(jié)構(gòu)體型變量stul、stu2在內(nèi)存中的存儲形式如圖所示。
sno sname age depmt cscore
1001 | Zhangsan | 20 | Computer | 89 |
1002 | Lisi | 18 | Computer | 80 |
說明:
①對于結(jié)構(gòu)體變量,必須先定義結(jié)構(gòu)體類型,之后用結(jié)構(gòu)體類型去定義該結(jié)構(gòu)體型變量。
②結(jié)構(gòu)體變量名的命名規(guī)則遵循標(biāo)識符的命名規(guī)則。
③定義結(jié)構(gòu)體變量時(shí)struct關(guān)鍵字不可以省略,例如,寫成如下形式是錯(cuò)誤的:
student s1;
一般在開發(fā)一個(gè)大型程序中,將結(jié)構(gòu)體類型的聲明都集中在一個(gè)頭文件中(.h ),其他源文件需要用這些結(jié)構(gòu)體定義變量,就在源程序的前面用文件包含命令#include <文件名>將該頭文件包含進(jìn)去。這樣的做法便于代碼重用,便于修改及裝配。
(2)在聲明結(jié)構(gòu)體類型的時(shí)候定義結(jié)構(gòu)體變量
可以在聲明結(jié)構(gòu)體類型的同時(shí)定義變量,其形式為:
struct 結(jié)構(gòu)體類型名
{
結(jié)構(gòu)體成員1;
結(jié)構(gòu)體成員2;
…
結(jié)構(gòu)體成員n;
}變量名1,變量名2,…變置名n;
例如:
struct student
{
int sno;
char sname[10];
int sage;
char depmt[20];
float cscore;
}stul,stu2;
這種定義結(jié)構(gòu)體變量的方法和第一種的作用是相同的,即先定義結(jié)構(gòu)體類型,然后馬上定義兩個(gè)結(jié)構(gòu)體變量。
使用這種方法定義結(jié)構(gòu)體變量后,也可以使用第一種方法繼續(xù)定義其他的該結(jié)構(gòu)體型的變量。
(3)省略結(jié)構(gòu)體類型名的變量定義
可以不為結(jié)構(gòu)體賦類型名而直接進(jìn)行結(jié)構(gòu)體變量的定義,其形式為:
struct
{
結(jié)構(gòu)體成員1;
結(jié)構(gòu)體成員2;
…
結(jié)構(gòu)體成員n;
}變量名1.變M名2,…變量名n;
例如:
struct
{
int sno;
char sname[10];
int sage;
char depmt[20];
float cscore;
}stul,stu2;
這種定義方法與前兩種定義的作用相同,不過當(dāng)省略結(jié)構(gòu)體類型名后,只能把程序中所有用到的結(jié)構(gòu)體變量都直接定義在結(jié)構(gòu)體類型的后面,而不能在程序中使用第一種方法再次定義了。所以有時(shí)候使用起來不太方便。
關(guān)于結(jié)構(gòu)體變量的幾點(diǎn)說明:
①結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是不同的概念,可以對結(jié)構(gòu)體變量存取、賦值或計(jì)算,而不能對一個(gè)結(jié)構(gòu)體類型賦值。在編譯時(shí),只對結(jié)構(gòu)體變量分配內(nèi)存空間,而結(jié)構(gòu)體類型是不占內(nèi)存空間的。也就是說,結(jié)構(gòu)體類型是虛的概念,里面并不存儲實(shí)質(zhì)性的內(nèi)容,而結(jié)構(gòu)體變量則是一個(gè)實(shí)際的變量,里面可按要求存儲各種數(shù)據(jù)。類似于要建造一個(gè)樓房,必須先有房屋設(shè)計(jì)圖紙,按照圖紙施工,建立起一個(gè)真正的樓房。結(jié)構(gòu)體類型就相當(dāng)于圖紙,圖紙是虛的,結(jié)構(gòu)體類型也是虛的,沒有人會住在圖紙上。而按照圖紙施工建造起來的樓房是實(shí)實(shí)在在的存在,結(jié)構(gòu)體變量相當(dāng)于實(shí)際的樓房,樓房中可以住人(相當(dāng)于結(jié)構(gòu)體變量的值),結(jié)構(gòu)體變量中也可以存儲數(shù)據(jù)。按照圖紙建造起的樓房可以是一幢樓房,也可以是多幢樓房,但按一個(gè)圖紙建立起的多幢樓房的結(jié)構(gòu)應(yīng)該都是相同的。
②結(jié)構(gòu)體變量和普通的簡單變量一樣使用,可以賦值、輸入輸出等。結(jié)構(gòu)體變量中的成員也可以單獨(dú)作用,相當(dāng)于普通變量。
③結(jié)構(gòu)體成員也可以是一個(gè)結(jié)構(gòu)體變量。
④成員名可以和變量名相同,兩者不代表同一個(gè)對象,互不干擾,例如:
struct date year;
year.year =1980;
定義了一個(gè)date型結(jié)構(gòu)體類型,其中有一個(gè)year成員,之后又用該結(jié)構(gòu)體類型去定義一個(gè)名為year的變量。這種使用方法是允許的。
點(diǎn)擊加載更多評論>>