C語言結(jié)構(gòu)體定義的方法匯總
什么是結(jié)構(gòu)體?
在C語言中,結(jié)構(gòu)體(struct)指的是一種數(shù)據(jù)結(jié)構(gòu),是C語言中聚合數(shù)據(jù)類型(aggregate data type)的一類。結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體同時(shí)也是一些元素的集合,這些元素稱為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
結(jié)構(gòu)體與數(shù)組的比較
(1) 都由多個(gè)元素組成
(2) 各個(gè)元素在內(nèi)存中的存儲(chǔ)空間是連續(xù)的
(3) 數(shù)組中各個(gè)元素的數(shù)據(jù)類型相同,而結(jié)構(gòu)體中的各個(gè)元素的數(shù)據(jù)類型可以不相同
結(jié)構(gòu)體的定義:
C語言結(jié)構(gòu)體類型的定義模板大概為:
struct 類型名{
成員表列
} 變量;
在成員表列中可以是幾種基本數(shù)據(jù)類型,也可以是結(jié)構(gòu)體類型。
struct 類型名{} 變量;后的分號(hào)不能漏
下面給出定義結(jié)構(gòu)體類型的幾種方法
1. 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量。
struct student{
char no[20]; //學(xué)號(hào)
char name[20]; //姓名
char sex[5]; //性別
int age; //年齡
};
struct student stu1,stu2;
//此時(shí)stu1,stu2為student結(jié)構(gòu)體變量
2. 定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量。
struct student{
char no[20]; //學(xué)號(hào)
char name[20]; //姓名
char sex[5]; //性別
int age; //年齡
} stu1,stu2;
此時(shí)還可以繼續(xù)定義student結(jié)構(gòu)體變量如:
struct student stu3;
3.直接定義結(jié)構(gòu)體變量。
struct{
char no[20]; //學(xué)號(hào)
char name[20]; //姓名
char sex[5]; //性別
int age; //年齡
} stu1,stu2;
一般不會(huì)使用第三種定義方法,因?yàn)橹苯佣x結(jié)構(gòu)體變量stu1,stu2后就不能再繼續(xù)定義該類型的變量。
注意:
在C語言中使用struct定義結(jié)構(gòu)體類型后定義結(jié)構(gòu)體變量時(shí)struct不能省略,在C++中允許省略struct。
在c中:
struct student{
...
};
struct student stu1; //struct不可省略
在c++中:
struct student{
...
};
student stu1; //struct可省略
在C中定義結(jié)構(gòu)體類型后每次定義變量時(shí)都要使用struct,如果嫌麻煩,我們可以這樣:
typedef struct student{
...
}STUDENT;
STUDENT stu1;
使用typedef給struct student取一個(gè)"別名"STUDENT
在某些情況下還可以使用#define來實(shí)現(xiàn)更簡化的結(jié)構(gòu)體定義與變量的定義,但可能會(huì)犧牲部分可讀性。
#define STUDENT struct student;
STUDENT{
...
};
STUDENT stu1;
typedef和#define用法不同,甚至可以結(jié)合起來靈活使用,使用時(shí)一定要注意兩者的不同之處。
總結(jié)
以上所述是小編給大家介紹的C語言結(jié)構(gòu)體定義的方法匯總,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解單鏈表
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之單鏈表,鏈表是由一個(gè)個(gè)結(jié)點(diǎn)鏈結(jié)成的。結(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分,數(shù)據(jù)域用來存儲(chǔ)數(shù)據(jù)元素的信息,指針域用來存儲(chǔ)下一個(gè)結(jié)點(diǎn)的地址,更詳細(xì)內(nèi)容請需要的小伙伴參考下面文章內(nèi)容2022-03-03
Linux UDP服務(wù)端和客戶端程序的實(shí)現(xiàn)
這篇文章主要介紹了Linux UDP服務(wù)端和客戶端程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
C語言之棧和堆(Stack && Heap)的優(yōu)缺點(diǎn)及其使用區(qū)別
本篇文章主要介紹了什么是棧(Stack) 、什么是堆( Heap),以及棧和堆的優(yōu)缺點(diǎn),同時(shí)介紹了應(yīng)該什么時(shí)候使用堆和棧,有需要的朋友可以參考下2015-07-07
OpenCV實(shí)現(xiàn)圖像背景虛化效果原理詳解
相信用過相機(jī)的同學(xué)都知道虛化特效,這是一種使焦點(diǎn)聚集在拍攝主題上,讓背景變得朦朧的效果。本文將詳細(xì)介紹一些這一效果的實(shí)現(xiàn)原理以及代碼,需要的可以參考一下2022-03-03
C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹堆
這篇文章主要為大家介紹了C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹堆的圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
c與c++之間的相互調(diào)用及函數(shù)區(qū)別示例詳解
這篇文章主要為大家介紹了c與c++相互調(diào)用的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

