C語言的結構與聯合的實例分析
引導語:結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。以下是本站小編分享給大家的C語言的結構與聯合的實例分析,歡迎閱讀!
結構類型定義和結構變量說明
在實際問題中,一組數據往往具有不同的數據類型。例如, 在學生登記表中,姓名應爲字符型;學號可爲整型或字符型; 年齡應爲整型;性別應爲字符型;成績可爲整型或實型。 顯然不能用一個數組來存放這一組數據。 因爲數組中各元素的類型和長度都必須一致,以便於編譯系統處理。爲了解決這個問題,C語言中給出了另一種構造數據類型——“結構”。 它相當於其它高級語言中的記錄。
“結構”是一種構造類型,它是由若干“成員”組成的。 每一個成員可以是一個基本數據類型或者又是一個構造類型。 結構既是一種“構造”而成的數據類型, 那麼在說明和使用之前必須先定義它,也就是構造它。如同在說明和調用函數之前要先定義函數一樣。
一、結構的定義
定義一個結構的一般形式爲:
struct 結構名
{
成員表列
};
成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作類型說明,其形式爲:
類型說明符 成員名;
成員名的命名應符合標識符的書寫規定。例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
在這個結構定義中,結構名爲stu,該結構由4個成員組成。 第一個成員爲num,整型變量;第二個成員爲name,字符數組;第三個成員爲sex,字符變量;第四個成員爲score,實型變量。 應注意在括號後的分號是不可少的。結構定義之後,即可進行變量說明。 凡說明爲結構stu的變量都由上述4個成員組成。由此可見, 結構是一種複雜的數據類型,是數目固定,類型不同的若干有序變量的集合。
二、結構類型變量的說明
說明結構變量有以下三種方法。以上面定義的stu爲例來加以說明。
1. 先定義結構,再說明結構變量。如:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
struct stu boy1,boy2;
說明了兩個變量boy1和boy2爲stu結構類型。也可以用宏定義使一個符號常量來表示一個結構類型,例如:
#define STU struct stu
STU
{
int num;
char name[20];
char sex;
float score;
};
STU boy1,boy2;
2. 在定義結構類型的同時說明結構變量。例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
}boy1,boy2;
3. 直接說明結構變量。例如:
struct
{
int num;
char name[20];
char sex;
float score;
}boy1,boy2;
第三種方法與第二種方法的區別在於第三種方法中省去了結構名,而直接給出結構變量。三種方法中說明的boy1,boy2變量都具有圖1.1所示的結構。說明了boy1,boy2變量爲stu類型後,即可向這兩個變量中的各個成員賦值。在上述stu結構定義中,所有的成員都是基本數據類型或數組類型。成員也可以又是一個結構, 即構成了嵌套的結構。例如,圖1.2給出了另一個數據結構。 按圖1.2可給出以下結構定義:
struct date{
int month;
int day;
int year;
}
struct{
int num;
char name[20];
char sex;
struct date birthday;
float score;
}boy1,boy2;
首先定義一個結構date,由month(月)、day(日)、year(年) 三個成員組成。 在定義並說明變量 boy1 和 boy2 時, 其中的成員birthday被說明爲data結構類型。成員名可與程序中其它變量同名,互不干擾。結構變量成員的表示方法在程序中使用結構變量時, 往往不把它作爲一個整體來使用。
在ANSI C中除了允許具有相同類型的結構變量相互賦值以外, 一般對結構變量的使用,包括賦值、輸入、輸出、 運算等都是通過結構變量的成員來實現的。
表示結構變量成員的一般形式是: 結構變量名.成員名 例如: 即第一個人的學號 即第二個人的性別 如果成員本身又是一個結構則必須逐級找到最低級的成員才能使用。例如:h 即第一個人出生的月份成員可以在程序中單獨使用,與普通變量完全相同。
結構變量的賦值
前面已經介紹,結構變量的賦值就是給各成員賦值。 可用輸入語句或賦值語句來完成。
[例1.1]給結構變量賦值並輸出其值。
main(){
struct stu
{
int num;
char *name;
char sex;
float score;
} boy1,boy2;
=102;
="Zhang ping";
printf("input sex and score ");
scanf("%c %f",&,&e);
boy2=boy1;
printf("Number=%d Name=%s ",,);
printf("Sex=%c Score=%f ",,e);
}
struct stu
{
int num;
char *name;
char sex;
float score;
}boy1,boy2;
=102;
="Zhang ping";
printf("input sex and score ");
scanf("%c %f",&,&e);
boy2=boy1;
printf("Number=%d Name=%s ",,);
printf("Sex=%c Score=%f ",,e);
本程序中用賦值語句給num和name兩個成員賦值,name是一個字符串指針變量。用scanf函數動態地輸入sex和score成員值,然後把boy1的所有成員的值整體賦予boy2。最後分別輸出boy2 的各個成員值。本例表示了結構變量的賦值、輸入和輸出的方法。
結構變量的初始化
如果結構變量是全局變量或爲靜態變量, 則可對它作初始化賦值。對局部或自動結構變量不能作初始化賦值。
[例1.2]外部結構變量初始化。
struct stu /*定義結構*/
{
int num;
char *name;
char sex;
float score;
} boy2,boy1={102,"Zhang ping",'M',18.5};
main()
{
boy2=boy1;
printf("Number=%d Name=%s ",,);
printf("Sex=%c Score=%f ",,e);
}
struct stu
{
int num;
char *name;
char sex;
float score;
}boy2,boy1={102,"Zhang ping",'M',18.5};
main()
{
boy2=boy1;
……
}
本例中,boy2,boy1均被定義爲外部結構變量,並對boy1作了初始化賦值。在main函數中,把boy1的值整體賦予boy2, 然後用兩個printf語句輸出boy2各成員的值。
相關文章
-
C語言數據結構樹雙親表示法實例分析
樹狀圖是一種數據結構,它是由n(n>=1)個有限節點組成一個具有層次關係的集合。以下是本站小編搜索整理的關於C語言數據結構樹雙親表示法實例分析,需要的朋友可以參考一下!想了解更多相關信息請持續關注我們應屆畢業生考試 -
C語言棧的表示與實現實例詳解分析
1.基本概念:C語言的棧是指限定僅在表尾進行插入和刪除操作的線性表。棧作爲C語言中一種常用的數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的` -
C語言順序結構的設計實例
引導語:順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的'執行順序是自上而下,依次執行。以下是本站小編分享給大家的C語言順序結構的設計實例,歡迎參考學習! 順序結構的設計實例 【例1】 -
《結構素描的分析與綜合》美術教案示例
開場及《禮讚春天》男:尊敬的各位領導、各位來賓女:親愛的朋友們合:大家晚上好!男:上元良宵鬧元宵,又到了萬家歡慶鬧元宵的時刻,雲梯山下、金沙江畔,處處充滿了節日的喜悅女: 場內場外, 歡聲笑語,整個晚會現場燈火輝煌,春意 -
雅思寫作高分語法結構與示例解析
導語:英語寫作中肯定要用到英語的語法,但想要寫好一篇英語作文,就要學會用一些高級的語法結構去美化英語作文,下面YJBYS小編分享雅思寫作高分語法結構與示例解析,歡迎參考! 1. 狀語前置狀語前置就是把一個修飾動詞的狀 -
C語言條件編譯分析實例
引導語;一般情況下,源程序中所有的行都參加編譯。但有時希望對其中一部分內容只在滿足一定條件下才進行編譯,即對一部分內容指定編譯條件,這就是條件編譯(conditional compile)。以下是本站小編分享給大家的C語言條件編 -
C語言中二叉樹的鏈式存儲實例分析
xx年9月23號,本人蔘加鄉鎮衛生院醫生招考,榮幸的被錄取爲一名正式在職醫生。在一年的試用期內,在市衛生局和醫院各級領導的領導下,堅持以xx大精神以及xxxx重要思想爲指導,深入學習科學發展觀,認真做好各項業務性工作及事務 -
C語言實現歸併排序算法實例分析
歸併排序(Merge sort)是創建在歸併操作上的一種有效的排序算法。該算法是採用分治法(Divide and Conquer)的.一個非常典型的應用。以下是本站小編搜索整理的關於C語言實現歸併排序算法實例分析,供參考學習,希望對大家有 -
C語言main函數的三種形式實例分析
本文是本站小編搜索整理的關於C語言main函數的.三種形式實例詳解的相關資料,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!在C語言中,main()函數有三種形式。 1、無參數#include -
Swift與C語言指針結合使用實例
引導語:Swift可與Object-C共同運行於MAC OS和iOS平臺,用於搭建基於蘋果平臺的應用程序。以下是本站小編分享給大家的Swift與C語言指針結合使用實例,歡迎閱讀!####用以輸入/輸出的參數指針C和Objective-C並不支持多返回值