c51程式設計有時需要將一批基本型別的資料放在一起使用,從而引入了所謂構造型別資料,前面學習的資料就是一種構造型別的資料,乙個陣列實際上是一批順序存放的相同型別資料。結構體也是一種結構型別資料。
結構體它是將若干個不同型別的資料變數有序地組合在一起而形成的一種資料集合體。
一般來說,結構體中各個變數之間是存在某些聯絡的,例如時間的時分秒,日期中的年月日
1.結構體型別定義
1)結構體型別定義的一般格式為:
struct 結構體名
;2)其中,"結構體元素表"為該結構體中的各個成員,由於結構體可以由不同型別的資料組成,因此對結構體中各個成員都要進行型別說明。
例如,乙個日期結構體型別date,它由三個結構體元素year,month,day組成,定義格式如下:
struct date;
3)定義乙個結構體型別只是給出了改結構體的組織形式,並沒有給出具體的組織成員(結構體變數),因此結構體名不占用任何儲存空間,也不能對乙個結構體名進行賦值、訪問和運算。
2.結構體變數定義
1)結構體變數則是乙個結構體中的具體的組織成員,編譯器會分配確定的儲存空間,因此可以對結構體變數名進行賦值,訪問和運算。定義好乙個結構體型別後,就可以用它來定義結構體變數,一般格式為:
struct 結構體名 結構體變數1,結構體變數2,結構體變數3。。。。
例如 可以用結構體date來定義兩個結構體變數d1和d2;
struct date d1,d2;
結構體變數d1和d2都具有struct date型別的結構體,即他們都是由乙個無符號整形資料和兩個無符號字元型資料所組成的。
定義結構體型別的同時定義結構體變數名
struct dated1,d2;
3.結構體變數的引用
1)定義了乙個結構體變數後,就可以對它進行引用,完成賦值,訪問和運算等,引用結構體元素的一般格式:
結構體變數名.結構體元素
其中,是訪問結構體元素成員運算子。例如,d1.year表示引用結構體變數d1中的元素year。
2)對結構體變數中的各個元素可以像普通變數一樣進行賦值,訪問,運算。
例如:d1.year=2017;
d1.month=5;
d1.day=13;
4.結構體型指標
1)指向結構體型別變數的指標稱為結構體型指標,該指標變數的值是它所指向的結構體變數的起始位址。
2)定義結構體型指標一般格式為:
strcut 結構體型別識別符號 *結構體指標識別符號
如前面的date結構體型別,用struct date *pd1;這裡pd1就可以用來指向date型別的結構體變數。
結構體型指標與一般指標相同,必須先賦值後才能引用。
pd1=&d1; //結構體指標變數賦值,指向結構體變數d1
3)通過結構體型指標引用結構體元素的一般格式為:
結構體指標->結構體元素
與結構體變數引用結構體元素的格式相比,這裡只不過是用符號"->"(減號大於號)取代了符號"."而已。
例如pd1->year完全等效於d1.year
5.將結構體型指標作為函式的引數
1)當乙個結構體較大的時候,若將該結構作為函式的引數,由於引數傳遞採用的是值傳遞方式,需要較大的儲存空間(堆疊),將所有結構體元素壓棧和出棧,此外還會影響程式的執行速度。
實際上可以用結構體型指標作為函式引數,此時引數傳遞是按位址傳遞方式進行的。由於採用位址傳遞方式,只需要傳遞乙個位址值,與前者相比,既可以節省儲存空間,同時還可以加快程式執行的速度。
例如:struct date d1; //定義結構體變數
struct date *pd1; //定義結構體指標變數
void setdate(struct date *dat)
pd1=&d1; //指向結構體變數d1
setdate(pd1); //結構體指標作為函式引數
STC89C52開發學習(三)
不多bb,先上 讓大家看看 include reg52.h include intrins.h typedef unsigned int u16 typedef unsigned char u8 define led p2 void delay u16 i void main for i 0 i 7...
STC89C52中斷系統
80c51的中斷系統有5個中斷源 80c52有6個 2個優先順序,可實現二級中斷巢狀。根據它的原理圖就可以看出,80c51一共有4個暫存器 tcon,scon,ie,ip 附件有她們的詳細的暫存器示例圖。img upload attachment 88246 4f31826e 53a5 30c4 8...
基於stc89c52藍芽四輪小車
基於stc89c52 藍芽四輪小車 protell99se sch 原理圖 mss130303.ddb mss學習整理所得 未完全除錯日期 2013 03 03 準備 1 硬體 四輪小車底盤 andriod 手機51最小系統 stc89c52 藍芽模組 hc 06 從機電機驅動模組 l298n 帶 ...