位置:首頁 > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 結(jié)構(gòu)體變量的定義

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-02

定義結(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的變量。這種使用方法是允許的。


繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部