版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
利用復(fù)雜的構(gòu)造類型解決實(shí)際問題
利用復(fù)雜的構(gòu)造類型解決實(shí)際問題【單元導(dǎo)讀】
單元學(xué)習(xí)目標(biāo):能利用結(jié)構(gòu)體變量和結(jié)構(gòu)體數(shù)組分別處理一組數(shù)據(jù)和多組數(shù)據(jù),并學(xué)會(huì)使用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù);能利用共用體類型節(jié)省內(nèi)存空間;能利用枚舉類型簡(jiǎn)化程序;能用typedef聲明類型別名;能利用鏈表處理一組數(shù)據(jù),以彌補(bǔ)數(shù)組在處理數(shù)據(jù)時(shí)的一些缺陷。
數(shù)組是將相同類型的多個(gè)數(shù)據(jù)組合在一起。對(duì)于不同類型的一組數(shù)據(jù),如一名學(xué)生的學(xué)號(hào)為整型,姓名為字符型,性別為字符型,成績(jī)?yōu)閷?shí)型,能否用數(shù)組存放該學(xué)生的這些信息呢?——可用結(jié)構(gòu)體類型將不同類型的若干個(gè)數(shù)據(jù)組合在一起。
有時(shí)需要將多個(gè)不同類型的變量存放到同一段內(nèi)存單元中,以便節(jié)省內(nèi)存的開銷——可用共用體類型來實(shí)現(xiàn)。
有些變量的取值僅限于幾種可能的列舉值,例如一星期只有7天,這種變量可聲明為枚舉類型。C語言允許用戶自己建立由不同類型(或同類型)數(shù)據(jù)組成的組合型數(shù)據(jù)結(jié)構(gòu)——“結(jié)構(gòu)體”。6.1聲明一個(gè)結(jié)構(gòu)體類型【課堂練習(xí)】聲明同步練習(xí)6-2中的商品結(jié)構(gòu)體類型。6.2
利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)6.2.1定義結(jié)構(gòu)體變量的方法
在聲明類型后可以隨時(shí)定義變量,使用靈活。
聲明的結(jié)構(gòu)體類型,僅相當(dāng)于一個(gè)模型,其中并無具體數(shù)據(jù),系統(tǒng)并不對(duì)其分配內(nèi)存空間。系統(tǒng)只對(duì)變量或數(shù)組分配內(nèi)存空間,因此為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類型的變量或數(shù)組。
能直接看到結(jié)構(gòu)體的結(jié)構(gòu),較為直觀,在編寫小程序時(shí)常用此方法。
沒有結(jié)構(gòu)體名,不能再用此結(jié)構(gòu)體類型去定義其他變量,實(shí)際應(yīng)用較少。注意:結(jié)構(gòu)體變量在程序執(zhí)行期間,所有成員一直駐留在內(nèi)存中。【課后作業(yè)】用sizeof運(yùn)算符測(cè)試結(jié)構(gòu)體類型
structStudent
的長(zhǎng)度。(1)先聲明結(jié)構(gòu)體類型
再定義結(jié)構(gòu)體變量(2)在聲明結(jié)構(gòu)體類型的
同時(shí)定義結(jié)構(gòu)體變量
(3)不指定結(jié)構(gòu)體名而
直接定義結(jié)構(gòu)體變量
定義的兩個(gè)變量stu1和stu2都具有structStudent類型的結(jié)構(gòu):stu1stu2說明:
(1)結(jié)構(gòu)體中的成員也可以是一個(gè)結(jié)構(gòu)體類型的變量。例如:(2)結(jié)構(gòu)體中的成員名可與程序中其它變量同名,但二者代表不同的對(duì)象,互不干擾。6.2.1定義結(jié)構(gòu)體變量的方法6.2
利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)【課后作業(yè)】同步練習(xí)6-1:知識(shí)鞏固。6.2.2結(jié)構(gòu)體變量的初始化
和其他類型的變量一樣,結(jié)構(gòu)體變量可以在定義時(shí)進(jìn)行初始化賦值。初始化列表是用花括號(hào)括起來的一些常量(依次賦給結(jié)構(gòu)體變量中的成員)。6.2
利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)6.2.3結(jié)構(gòu)體變量的引用
在定義結(jié)構(gòu)體變量以后,便可引用該變量。C允許具有相同類型的結(jié)構(gòu)體變量相互賦值;而對(duì)結(jié)構(gòu)體變量的輸入、輸出及各種運(yùn)算都是通過結(jié)構(gòu)體變量的成員來實(shí)現(xiàn)的。6.2
利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)
結(jié)構(gòu)體變量成員的引用形式:結(jié)構(gòu)體變量名.成員名
若成員本身又是一個(gè)結(jié)構(gòu)體類型,則必須逐級(jí)找到最低級(jí)的成員才能使用。例如:stu1.birthday.month為第1名學(xué)生出生的月份例如:stu1.stu_ID即第一名學(xué)生的學(xué)號(hào)
stu2.sex
即第二名學(xué)生的性別
成員(分量)運(yùn)算符“.”的優(yōu)先級(jí)最高。stu1.stu_ID作為一個(gè)整體看待。說明:
(1)結(jié)構(gòu)體變量成員可以和普通變量一樣進(jìn)行各種運(yùn)算。
(2)可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址?!纠?.1】結(jié)構(gòu)體變量的初始化和引用。6.2.3結(jié)構(gòu)體變量的引用6.2
利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)#include
<stdio.h>#include
<string.h>structStudent
//聲明結(jié)構(gòu)體類型{
int
stu_ID;
//學(xué)號(hào)
charname[20];//姓名
floatscore;
//成績(jī)};intmain(void){
structStudent
stu1
=
{1001,"SunLi",
75.0};//定義stu1變量并初始化
structStudentstu2,
stu3;//定義stu2、stu3變量
stu2.stu_ID=
1002;
//引用結(jié)構(gòu)體變量成員,并賦值strcpy(stu2.name,
"ZhangPing");
stu2.score
=
80.0;
stu3
=
stu1;
//結(jié)構(gòu)體變量相互賦值printf("學(xué)號(hào)\t姓名\t\t成績(jī)\n");printf("%d%-20s%4.1f\n",stu1.stu_ID,stu1.name,stu1.score);printf("%d%-20s%4.1f\n",stu2.stu_ID,stu2.name,stu2.score);printf("%d%-20s%4.1f\n",stu3.stu_ID,stu3.name,stu3.score);}【課后作業(yè)】
同步練習(xí)6-2:學(xué)以致用。6.3.1定義結(jié)構(gòu)體數(shù)組的方法
一個(gè)結(jié)構(gòu)體變量可以存放一名學(xué)生的信息,而結(jié)構(gòu)體數(shù)組可以存放多名學(xué)生的信息,結(jié)構(gòu)體數(shù)組中的每個(gè)元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù)。
定義的結(jié)構(gòu)體數(shù)組stu,共有5個(gè)元素:stu[0]~stu[4]。每個(gè)數(shù)組元素都是structStudent結(jié)構(gòu)體類型的。6.3
利用結(jié)構(gòu)體數(shù)組處理多組數(shù)據(jù)6.3.2結(jié)構(gòu)體數(shù)組的初始化
對(duì)結(jié)構(gòu)體數(shù)組,可以進(jìn)行初始化賦值。6.3
利用結(jié)構(gòu)體數(shù)組處理多組數(shù)據(jù)例如:6.3.2結(jié)構(gòu)體數(shù)組的應(yīng)用【例6.2】計(jì)算一組學(xué)生的平均成績(jī),并統(tǒng)計(jì)、輸出不及格的人數(shù)。6.3
利用結(jié)構(gòu)體數(shù)組處理多組數(shù)據(jù)#include
<stdio.h>structStudent
//聲明結(jié)構(gòu)體類型{
int
stu_ID;
//學(xué)號(hào)
charname[20];//姓名
floatscore;
//成績(jī)};structStudent
stu[5]
=
{
{1001,
"Liping",
45},
{1002,
"Zhaomin",
62.5},
{1003,
"Hefen",
92.5},
{1004,
"Chenlin",
87},
{1005,
"Wanmin",
58}
};intmain(void){
inti,
count=0;
floatave,
sum=0;for(i=0;i<5;i++){sum
=
sum
+
stu[i].score;if(stu[i].score<60)count++;
//統(tǒng)計(jì)不及格人數(shù)
}ave
=
sum/5;
//計(jì)算平均分printf("平均分:%.1f\n",
ave);//輸出數(shù)據(jù)保留1位小數(shù)printf("不及格人數(shù):%d\n",
count);}【課后作業(yè)】(1)【例6.3】建立同學(xué)通訊錄。
(2)同步練習(xí)6-3:知識(shí)鞏固與學(xué)以致用。6.4.1指向結(jié)構(gòu)體變量的指針
定義結(jié)構(gòu)體指針變量的一般形式為:
struct結(jié)構(gòu)體名
*結(jié)構(gòu)體指針變量名;
例如:structStudent*pstu;
指針變量pstu就可以用來指向structStudent類型的變量或數(shù)組元素。
結(jié)構(gòu)體指針是用來指向結(jié)構(gòu)體數(shù)據(jù)(結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組元素)的指針,若把一個(gè)結(jié)構(gòu)體數(shù)據(jù)的起始地址賦給一個(gè)指針變量,則該指針變量就指向這個(gè)結(jié)構(gòu)體數(shù)據(jù)。6.4
利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)【例6.4】通過3種方式訪問結(jié)構(gòu)體變量中的成員。
若結(jié)構(gòu)體指針變量指向了一結(jié)構(gòu)體數(shù)據(jù)(結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組元素),則訪問結(jié)構(gòu)體數(shù)據(jù)的成員有3種形式:(1)結(jié)構(gòu)體變量名.成員名
例如stu1.name
或
結(jié)構(gòu)體數(shù)組元素名.成員名(2)(*結(jié)構(gòu)體指針變量名).成員名例如(*pstu).name(3)結(jié)構(gòu)體指針變量名->成員名例如pstu->name6.4.1指向結(jié)構(gòu)體變量的指針6.4
利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)#include
<stdio.h>structStudent
//聲明結(jié)構(gòu)體類型{
int
stu_ID;
//學(xué)號(hào)
charname[20];//姓名
float
score;
//成績(jī)};intmain(void){
structStudent
stu1
=
{1002,
"張三強(qiáng)",
78.5};//定義結(jié)構(gòu)體變量stu1并賦值
structStudent*pstu
=
&stu1;//定義結(jié)構(gòu)體指針變量pstu,并指向變量stu1printf("學(xué)號(hào)姓名成績(jī)\n");printf("%d%s%.1f\n",stu1.stu_ID,stu1.name,stu1.score);printf("%d%s%.1f\n",(*pstu).stu_ID,(*pstu).name,(*pstu).score);printf("%d%s%.1f\n",pstu->stu_ID,pstu->name,pstu->score);}【課堂練習(xí)】同步練習(xí)6-4:知識(shí)鞏固。stu1pstu6.4.2指向結(jié)構(gòu)體數(shù)組的指針
當(dāng)結(jié)構(gòu)體指針變量指向結(jié)構(gòu)體數(shù)組中的某個(gè)元素時(shí),結(jié)構(gòu)體指針變量的值是該結(jié)構(gòu)體數(shù)組元素的起始地址。6.4
利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)【例6.5】用結(jié)構(gòu)體指針變量輸出結(jié)構(gòu)體數(shù)組。#include
<stdio.h>structStudent
//聲明結(jié)構(gòu)體類型{
int
stu_ID;//學(xué)號(hào)
charname[20];//姓名
floatscore;
//成績(jī)};intmain(void){ structStudentstu[3]
=
{
{1001,"Liping",45},
{1002,"Zhaomin",62.5},
{1003,"Hefen",92.5}
};//定義結(jié)構(gòu)體數(shù)組,并賦初值structStudent
*ps;
//定義結(jié)構(gòu)體指針變量printf("學(xué)號(hào)\t姓名\t\t成績(jī)\n");for(ps=stu;ps<stu+3;ps++)printf("%-6d%-20s%.1f\n",
ps->stu_ID,
ps->name,ps->score);}【課后作業(yè)】同步練習(xí)6-5:知識(shí)鞏固與學(xué)以致用。6.4.3結(jié)構(gòu)體指針變量作函數(shù)參數(shù)
將一個(gè)結(jié)構(gòu)體數(shù)據(jù)傳遞給另一個(gè)函數(shù)時(shí),若采用“地址傳遞”的方式(用指向結(jié)構(gòu)體數(shù)據(jù)的指針變量作函數(shù)參數(shù),將結(jié)構(gòu)體數(shù)據(jù)的起始地址傳遞給形參),則會(huì)減少時(shí)間和空間上的開銷,大大提高程序執(zhí)行效率。6.4
利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)【例6.6】用結(jié)構(gòu)體指針變量作函數(shù)參數(shù),輸出結(jié)構(gòu)體變量的值。#include<stdio.h>structStudent
//聲明結(jié)構(gòu)體類型{ intstu_ID;
//學(xué)號(hào)
charname[20];
//姓名
floatscore;
//成績(jī)};voidoutput(structStudent
*p);
//函數(shù)聲明intmain(void){ structStudentstu1={1002,"張三強(qiáng)",
78.5};
//定義結(jié)構(gòu)體變量stu1并賦值
structStudent
*pstu
=
&stu1;//定義結(jié)構(gòu)體指針變量pstu,并指向變量stu1
output(pstu);
//調(diào)用函數(shù),結(jié)構(gòu)體指針變量作函數(shù)實(shí)參}voidoutput(structStudent
*p)
//結(jié)構(gòu)體指針變量作函數(shù)形參{printf("學(xué)號(hào)姓名成績(jī)\n");printf("%d%s%.1f\n",p->stu_ID,p->name,p->score);}pstu1pstu【例6.7】改寫例6.2程序:計(jì)算一組學(xué)生的平均成績(jī),并統(tǒng)計(jì)、輸出不及格的人數(shù)。6.4.3結(jié)構(gòu)體指針變量作函數(shù)參數(shù)6.4
利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)#include
<stdio.h>structStudent
//聲明結(jié)構(gòu)體類型{
int
stu_ID;
//學(xué)號(hào)
charname[20];//姓名
floatscore;
//成績(jī)};
voidave(structStudent
*ps,
intn);
//函數(shù)聲明intmain(void){
structStudentstu[5]
=
{{101,
"Liping",
45},{102,
"Zhangping",
62.5},
{103,
"Hefang",
92.5},{104,
"Chengling",
87},{105,
"Wangming",
58}};
//定義結(jié)構(gòu)體數(shù)組并賦初值
structStudent
*pstu
=
stu;//定義結(jié)構(gòu)體指針變量,并指向數(shù)組stu首元素ave(pstu,
5);
//調(diào)用ave函數(shù),實(shí)參:結(jié)構(gòu)體指針變量pstu、數(shù)值5}voidave(structStudent
*ps,intn)//形參:結(jié)構(gòu)體指針變量ps、變量n{
intcount=0,i;
floatave,sum=0;for(i=0;i<n;i++,
ps++){sum
=
sum
+
ps->score;if(ps->score
<
60)count++;}ave
=
sum/5;printf("平均分:%.1f\n",ave);printf("不及格人數(shù):%d\n",count);}【課后作業(yè)】
同步練習(xí)6-6:學(xué)以致用。*6.4.4結(jié)構(gòu)體指針數(shù)組及其應(yīng)用6.4
利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)1、結(jié)構(gòu)體指針數(shù)組的概念結(jié)構(gòu)體指針數(shù)組可以存放多個(gè)結(jié)構(gòu)體數(shù)據(jù)的指針(地址)。【例6.8】用結(jié)構(gòu)體指針數(shù)組輸出結(jié)構(gòu)體數(shù)組。structStudent
//聲明結(jié)構(gòu)體類型{
int
stu_ID;
//學(xué)號(hào)
charname[20];//姓名
floatscore;
//成績(jī)};intmain(void){
int
i;
structStudentstu[3]
=
{
{1001,"Liping",45},{1002,"Zhaomin",62.5},{1003,"Hefen",92.5}
};
//定義結(jié)構(gòu)體數(shù)組,并賦初值structStudent
*ps[3]={stu,stu+1,stu+2};
//定義結(jié)構(gòu)體指針數(shù)組,并賦初值printf("學(xué)號(hào)\t姓名\t\t成績(jī)\n");for(i=0;
i<3;
i++)printf("%-6d%-20s%.1f\n",
ps[i]->stu_ID,
ps[i]->name,ps[i]->score);}*6.4.4結(jié)構(gòu)體指針數(shù)組及其應(yīng)用6.4
利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)【例6.9】用結(jié)構(gòu)體指針數(shù)組名作為函數(shù)參數(shù),改寫例6.8,輸出結(jié)構(gòu)體數(shù)組。structStudent
//聲明結(jié)構(gòu)體類型{
int
stu_ID;
//學(xué)號(hào)
charname[20];//姓名
floatscore;
//成績(jī)};voidoutput(structStudent*p[],intn);
//函數(shù)聲明intmain(void){structStudentstu[3]
=
{
{1001,"Liping",45},{1002,"Zhaomin",62.5},{1003,"Hefen",92.5}
};
//定義結(jié)構(gòu)體數(shù)組,并賦初值structStudent
*ps[3]
={stu,stu+1,stu+2};
//定義結(jié)構(gòu)體指針數(shù)組,并賦初值
output(ps,3);
//調(diào)用output函數(shù),結(jié)構(gòu)體指針數(shù)組名作函數(shù)實(shí)參
}voidoutput(structStudent*p[],intn)
//結(jié)構(gòu)體指針數(shù)組名作函數(shù)形參{
int
i;
printf("學(xué)號(hào)\t姓名\t\t成績(jī)\n");for(i=0;
i<3;
i++)printf("%-6d%-20s%.1f\n",
p[i]->stu_ID,
p[i]->name,p[i]->score);}2、結(jié)構(gòu)體指針數(shù)組名作為函數(shù)參數(shù)——傳遞結(jié)構(gòu)體指針數(shù)組的首地址*6.4.4結(jié)構(gòu)體指針數(shù)組及其應(yīng)用6.4
利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)說明:
(1)可在后續(xù)通過第8單元的任務(wù)8.2進(jìn)一步理解并加以掌握結(jié)構(gòu)體指針數(shù)組的應(yīng)用方法。
(2)在嵌入式軟件設(shè)計(jì)中,結(jié)構(gòu)體指針數(shù)組常用于保存嵌入式芯片外設(shè)寄存器的基地址,讀者可在后續(xù)通過參考文獻(xiàn)[2](索明何《基于構(gòu)件化的嵌入式系統(tǒng)設(shè)計(jì)》)進(jìn)一步學(xué)習(xí)。6.5.1共用體類型的概念
將變量c、i、j放在同一地址2000開始的內(nèi)存單元中。這種使多個(gè)不同的變量共用一段內(nèi)存的結(jié)構(gòu),稱為“共用體”——實(shí)現(xiàn)多個(gè)變量分時(shí)復(fù)用內(nèi)存。聲明共用體類型的一般形式:
union共用體名
{
成員列表
};6.5
利用共用體類型節(jié)省內(nèi)存空間6.5.2共用體類型的變量1、定義共用體變量的方法6.5
利用共用體類型節(jié)省內(nèi)存空間(1)先聲明共用體類型
再定義共用體變量(2)在聲明共用體類型的
同時(shí)定義共用體變量(3)不指定共用體名而
直接定義共用體變量2、共用體變量的引用方法
引用共用體變量成員的形式:共用體變量名.成員名
例如,d1.c、d1.i、d1.j分別表示引用共用體變量d1的3個(gè)成員。3、結(jié)構(gòu)體與共用體的比較
結(jié)構(gòu)體變量(所有成員共存)所占內(nèi)存長(zhǎng)度是各成員長(zhǎng)度之和。
共用體變量(各個(gè)成員互斥),在任何時(shí)刻只能使用其中的一個(gè)成員。所占內(nèi)存長(zhǎng)度是最長(zhǎng)成員的長(zhǎng)度。如共用體變量d1占4個(gè)字節(jié)(成員j的長(zhǎng)度)。共用體變量的地址和各成員的地址是相同。&d1和&d1.i、&d1.c、&d1.j相同。4、共用體變量的賦值(1)共用體變量的初始化賦值
定義變量時(shí),只能對(duì)變量的一個(gè)成員賦初值,而不能對(duì)所有的成員賦初值。例如:unionUDatad1={'a'};//'a'賦給變量d1的第1個(gè)成員cunionUDatad1={'a',12,345};//錯(cuò)誤,{}中只能有一個(gè)值unionUDatad1='a';//錯(cuò)誤,初值必須用{}括起來6.5.2共用體類型的變量6.5
利用共用體類型節(jié)省內(nèi)存空間(2)共用體變量在程序中賦值定義了共用體變量以后,只能對(duì)其成員賦值,不可對(duì)其整體賦值。同類型的共用體變量可以相互賦值。例如:unionUDatad1,d2,d[10];//定義共用體類型的變量、數(shù)組d1={'a',12,345};//錯(cuò)誤,不能對(duì)變量整體賦值d1.i=12;//將12賦給d1的成員i//同類型的共用體變量相互賦值d2=d1;d[0].c='a';//將'a'賦給d[0]的成員c【課后作業(yè)】
共用體的應(yīng)用:
例6.10和
例6.11【課堂練習(xí)】
同步練習(xí)6-7:知識(shí)鞏固。
在實(shí)際應(yīng)用中,
如果一個(gè)變量只有幾種可能的取值,例如一星期只有7天,那么該變量可定義為“枚舉(enumeration)類型”。
“枚舉”是指將變量的值一一列舉出來,變量的值僅限于列舉值的范圍內(nèi)。聲明枚舉類型:enumWeekday{Sun,
Mon,Tue,Wed,Thu,Fri,Sat};
花括號(hào)中的Sun、Mon、…、Sat稱為
枚舉元素
或
枚舉常量。注意:枚舉常量之間是用逗號(hào)間隔,而不是分號(hào)。定義枚舉變量:
枚舉變量只能取枚舉聲明中的某個(gè)枚舉元素值:workday=Mon;restday=Sat;enumWeekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}
workday,restday;也可以在聲明枚舉類型的同時(shí),定義枚舉變量:或
enum
{Sun,Mon,Tue,Wed,Thu,Fri,Sat}
workday,restday;6.6
利用枚舉類型簡(jiǎn)化程序如何簡(jiǎn)化書中的例題程序?
1、枚舉元素表中的每一個(gè)枚舉元素都代表一個(gè)整數(shù),默認(rèn)值依次為0、1、2、3、…。
在上述聲明中,Sun=0,Mon=1,…,Sat=6。
若人為地指定枚舉元素的數(shù)值:enumWeekday{Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat};
則:枚舉元素Sun=7,Mon=1,其后的元素按照順序依次加1,如Fri=5。說明://聲明枚舉類型//定義枚舉類型變量
2、只能把枚舉元素賦給枚舉變量,但不能把元素的數(shù)值直接賦給枚舉變量。例如:workday=Mon;//正確
workday=1;//錯(cuò)誤
workday=(enumWeekday)1;//正確(強(qiáng)制類型轉(zhuǎn)換),相當(dāng)于workday=Mon;
3、枚舉元素是常量,不是變量,因此不能在程序中再對(duì)它賦值。例如:enumWeekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}
workday;
Sun=7;//錯(cuò)誤
4、在ARM嵌入式芯片頭文件中,使用枚舉類型實(shí)現(xiàn)中斷向量號(hào)的編排(見參考文獻(xiàn)[2])。6.6
利用枚舉類型簡(jiǎn)化程序【課堂練習(xí)】
同步練習(xí)6-8:知識(shí)鞏固。
除了可以直接使用C語言提供的基本類型名(如int、char、float、double、long等)和用戶自己聲明的結(jié)構(gòu)體、共用體、枚舉類型外,還可以用typedef為已有的類型名聲明類型別名。1、用“簡(jiǎn)單且見名知意”的類型別名替代已有或復(fù)雜的類型名(1)替代基本類型6.7用typedef聲明類型別名(2)替代結(jié)構(gòu)體類型6.7用typedef聲明類型別名1、用“簡(jiǎn)單且見名知意”的類型別名替代已有或復(fù)雜的類型名_(1)用typedef聲明一個(gè)類型別名的方法步驟:(2)用typedef只是對(duì)已經(jīng)存在的類型指定一個(gè)類型別名,而沒有創(chuàng)造新的類型。2、幾點(diǎn)說明(3)#define
int16
shortint
和
typedef
shortint
int16;
區(qū)別:#define是在預(yù)編譯時(shí)處理的,它只能作簡(jiǎn)單的字符串替換;而typedef是在編譯階段處理的,并且它不是作簡(jiǎn)單的字符串替換,而是生成一個(gè)類型別名。
(4)可以把所有的typedef聲明單獨(dú)放在一個(gè)頭文件中,然后在需要用到它們的文件中用#include命令把其頭文件包含進(jìn)來,以便提高編程效率。6.7用typedef聲明類型別名【課后作業(yè)】
同步練習(xí)6-9:知識(shí)鞏固與應(yīng)用。6.8利用鏈表處理一組數(shù)據(jù)6.8.1鏈表概述(2)當(dāng)待處理的數(shù)據(jù)個(gè)數(shù)不確定時(shí),很難確定合適的數(shù)組長(zhǎng)度。
數(shù)組占用一片連續(xù)的存儲(chǔ)空間。優(yōu)點(diǎn):可用下標(biāo)隨機(jī)訪問任一數(shù)組元素。
缺點(diǎn):(1)對(duì)數(shù)組元素的插入或刪除操作不方便,效率較低。
鏈表,作為一種新的數(shù)據(jù)結(jié)構(gòu),可以彌補(bǔ)數(shù)組存在的以上缺陷。
一個(gè)單向鏈表由頭指針(head)和若干個(gè)節(jié)點(diǎn)組成。每個(gè)節(jié)點(diǎn)由數(shù)據(jù)域(存放本節(jié)點(diǎn)的實(shí)際數(shù)據(jù))和指針域(存放下一個(gè)節(jié)點(diǎn)的地址)兩部分組成。
頭指針用于存放第1個(gè)節(jié)點(diǎn)的地址,指向第1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024特殊工種委托招聘暨安全生產(chǎn)責(zé)任協(xié)議書3篇
- 2025年送氣工安全操作規(guī)范服務(wù)合同協(xié)議3篇
- 2025年度新能源汽車銷售代理協(xié)議4篇
- 二零二五年度魯佳與李明共同財(cái)產(chǎn)分割及子女監(jiān)護(hù)權(quán)協(xié)議4篇
- 二零二五年度碼頭港口船舶修造與維修服務(wù)合同4篇
- 二零二五年度鉆井工程合同規(guī)范范本6篇
- 2025年度高端旅游線路承包經(jīng)營(yíng)二零二五版旅行社合同4篇
- 2025年度綠色環(huán)保型SPF豬飼養(yǎng)費(fèi)項(xiàng)目合作協(xié)議3篇
- 二零二五版舞臺(tái)劇舞美燈光音響一體化服務(wù)合同3篇
- 2024知名餐飲品牌授權(quán)合同
- 2019級(jí)水電站動(dòng)力設(shè)備專業(yè)三年制人才培養(yǎng)方案
- 室內(nèi)裝飾裝修施工組織設(shè)計(jì)方案
- 洗浴中心活動(dòng)方案
- 送電線路工程施工流程及組織措施
- 肝素誘導(dǎo)的血小板減少癥培訓(xùn)課件
- 韓國(guó)文化特征課件
- 抖音認(rèn)證承諾函
- 清潔劑知識(shí)培訓(xùn)課件
- 新技術(shù)知識(shí)及軍事應(yīng)用教案
- 高等數(shù)學(xué)(第二版)
- 肺炎喘嗽的中醫(yī)護(hù)理常規(guī)
評(píng)論
0/150
提交評(píng)論