第三講 常量、變量和數(shù)組_第1頁
第三講 常量、變量和數(shù)組_第2頁
第三講 常量、變量和數(shù)組_第3頁
第三講 常量、變量和數(shù)組_第4頁
第三講 常量、變量和數(shù)組_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第三講 常量和變量周雪忠教九北509本講內(nèi)容n高級語言中常見的各種常量n數(shù)字常量、字符常量、字符串常量、符號常量、枚舉常量的表示或定義方法n變量n概念,定義方法,命名規(guī)則或規(guī)范nC語言變量的賦值、初始化和使用n變量的屬性n指針變量n構(gòu)造數(shù)據(jù)類型的基本概念n一維數(shù)組、字符數(shù)組n二維數(shù)組初步概念、定義和使用方法n結(jié)構(gòu)體n聯(lián)合(共用體)n數(shù)據(jù)是程序的運(yùn)算對象,與代數(shù)運(yùn)算表達(dá)式相仿,高級語言中的運(yùn)算對象也分為常量和變量,常量和變量都可以出現(xiàn)在表達(dá)式中,如n常量表達(dá)式:2+3+4*5n包含變量的表達(dá)式:y = x + 5;程序中的常量與變量看C程序中的數(shù)據(jù)#include #define PAI 3.1

2、415926int main(int argc, char* argv)char chA=A, chB=B, chC=C;int a=-1,b=0,c=20;long A=10L, B=20L, C=30L;char strA=This is a string!;float ftA=10.0, ftB=-0.089, ftC=3.90, ftE=1.2e3;printf(Hello World!n);printf(The chars are: %c,%c,%c!n, chA, chB, chC);printf(The ints are: %d,%d,%d!n, a, b, c);printf(

3、The longs are: %ld,%ld,%ld!n, A, B, C);printf(The floats are: %f,%f,%f!n, ftA, ftB, ftC);printf(The string is: %s!n, strA);printf(The value of PAI is: %f!n, PAI);return 0;以上程序中的數(shù)據(jù)n直接數(shù)據(jù)(文字量數(shù)據(jù),常量)n字符型數(shù)據(jù):字符型數(shù)據(jù):A, B, C n整數(shù)型數(shù)據(jù):整數(shù)型數(shù)據(jù):-1, 0, 20,n另一種整數(shù)型數(shù)據(jù):另一種整數(shù)型數(shù)據(jù):10L, 20L, 30Ln浮點(diǎn)型數(shù)據(jù)浮點(diǎn)型數(shù)據(jù): 10.0, -0.089, 3.9

4、0, 1.2e3, 3.1415926n字符串?dāng)?shù)據(jù):字符串?dāng)?shù)據(jù):This is a string!“n間接數(shù)據(jù)nchA, chB, chCna,b,cnA, B, CnftA, ftB, ftC, ftEnstrAnPAI (符號常量符號常量)變量一、常量1. 常量的概念和分類n常量n程序中直接給定n值在程序運(yùn)行過程中不可以改變的量。n各種常量n數(shù)字常量n字符常量n字符串常量n符號常量n枚舉常量n常變量(是變量的一種)2. 數(shù)字類型及常量n數(shù)字常量n表示參與計算的數(shù)值,既可以是整數(shù),也可以是帶小數(shù)的實(shí)數(shù)。n整數(shù)表示方法n十進(jìn)制 如:90、255n八進(jìn)制(以0開頭)如:0123n十六進(jìn)制(以0

5、x開頭) 如:0 x5a、0 x23ffn實(shí)數(shù)表示方法n整數(shù)部分或小數(shù)部分為0時,可以不寫數(shù)字0,如以下表示如:0.12 .23(0.23) 1.45 4.9 6.(6.0)n科學(xué)表示法如:0.12E3 5.6E-6 -7.6E12n單精度實(shí)數(shù)表示如:4.5f 6.3F 0.123E3f 5.6E-6F實(shí)數(shù)類型默認(rèn)為雙精度實(shí)數(shù)2. 字符類型及常量n定義n用一對單引號 括起來的單個字符.n字符分類n可見字符 如:字母、數(shù)字、標(biāo)點(diǎn)等。n不可見字符 如:控制光標(biāo)移動、使終端發(fā)出振鈴聲音的各類字符。n表示 如:0 z n t換行符橫向制表符(Tab)轉(zhuǎn)義字符序列換碼序列 含義 換碼序列 含義 a 響鈴

6、符 v 縱向制表符 b 退格符 反斜線 f 換頁符 ? 問號 n 換行符 單引號 r 回車符 ” 雙引號 t 橫向制表符3. 字符串類型及常量n定義n用一對雙引號” ”引起來的0個或多個連續(xù)的字符,但不包括雙引號。n當(dāng)字符串中包含雙引號時,需要用 ”來表示。n舉例n” This is a stringn ”n” ” is a double quote ”n在計算機(jī)中存儲時以空字符0結(jié)束,但在字符串常量中不需要直接表示這個空字符。字符串中可以包含換行符表示雙引號4. 符號常量n符號常量:用符號代表一定的常量n符號可以是任意的合法標(biāo)識符,但習(xí)慣使用大寫字母和下劃線組成的標(biāo)識符。n用宏命令#defi

7、ne定義符號常量n#define PI 3也可以定義常量表達(dá)式 #define TIMES (NUM/4)n優(yōu)點(diǎn)n有助于提高程序的可讀性n便于記憶和使用n有助于發(fā)現(xiàn)和減少程序中的錯誤n提高程序的可維護(hù)性最好根據(jù)常量的用途和含義對常量命名是一個編譯預(yù)處理命令,它所定義的符號常量在預(yù)編譯階段被替換為對應(yīng)的字符串。必須是已定義過的符號常量例/計算并輸出半徑為2.5米的圓的面積#define PI 3ain() printf(“Area = ”, PI * 2.5 * 2.5); return 0;5. 枚舉常量n定義n枚舉常量是一種用符號表示的整型

8、數(shù)字常量,且用標(biāo)識符表示。n使用關(guān)鍵字enum定義nenum A, B, C, D, E = 50, F, G, H, I;/A=0,B=1,nenum JAN = 1, FEB, MAR, APR, MAY, JUN, JLY, AUG, SEP, OCT, NOV, DEC;nenum val; / val的值為0n如果枚舉常量后面給定了值,則以給定值作為枚舉符對應(yīng)的常量值。n當(dāng)枚舉符后面沒有給定值時,第一個枚舉常量的默認(rèn)值為0;其余枚舉常量的值等于其前面枚舉常量的值加1。枚舉量與符號常量的意義n用文字符號的形式表示常量有利于更好地理解程序意義。n例如,程序里兩個0可能會代表不同意義,它們

9、在數(shù)值形式上沒有任何區(qū)分。但是,采用符號常量可提高可讀性,便于理解。n高級語言提供了用符號表示常量的辦法,在程序中統(tǒng)一使用。n好處n使程序更容易修改和閱讀常變量n是一種變量(C99),在變量中會再講。int main() const int a=10; a=11; /錯誤!A的值不能再修改。 return 0;二、變量及其屬性數(shù)據(jù)類型(關(guān)鍵字) 變量名稱(標(biāo)識符);int a;double b;1. 變量概念、定義和使用n變量n程序運(yùn)行過程中可以發(fā)生變化的量n存儲數(shù)據(jù)的命名對象(變量名)n變量名是標(biāo)識符。n使我們可能通過一個名字來使用存儲單元n變量的特點(diǎn)n變量能保存值,不會丟失。n變量的值可以

10、變化n變量賦一個值之后,每次使用它總得到這個值,直到下次賦值。n對變量基本操作n賦值(寫)n取值(讀)2. 變量的類型和定義n變量有固定的類型,只能保存這個類型的值。n整型變量(保存 int值的變量)n雙精度變量(保存 double 值)n字符變量,n變量定義n變量必須先定義后使用n需要給出變量名和類型n例nint m;ndouble x;n可以同時定義多個同類型的變量nint k, n, sum, count; /采用逗號分隔。nlong double y, z;為什么要給出類型?不給行不行?有不給的嗎?能定義一種變量存什么數(shù)據(jù)都行嗎?3. 變量的命名n關(guān)鍵字不能當(dāng)做變量名n變量的命名最好能

11、反映變量的實(shí)際含義n一些行業(yè)規(guī)范里,變量命名一般還應(yīng)反應(yīng)變量的類型,有些變量命名還要反應(yīng)變量的地位(如類屬性、全局變量)n變量命名要求參見編碼規(guī)范4. 復(fù)合結(jié)構(gòu)內(nèi)的局部變量n復(fù)合結(jié)構(gòu)中可以定義局部變量,在內(nèi)部使用n變量定義應(yīng)出現(xiàn)在所有語句之前變量定義序列語句序列n有些C+沒有這個要求n一個復(fù)合結(jié)構(gòu)里不能定義多個同名的變量。5. 變量的取值與賦值n取值:計算中遇到變量,取其值參與計算nx + sin(3.2 * y) - pow(x, 2)n賦值n用賦值運(yùn)算符(=,賦值號)表示n賦值語法nVariable = Expression /賦值表達(dá)式nx = 5.0n左邊是賦值目標(biāo),右邊是提供值的表達(dá)

12、式n賦值運(yùn)算的主要效果是把表達(dá)式的值賦給左邊變量n賦值運(yùn)算符優(yōu)先級很低。n例nx = 2 + 3 * y賦值語句n賦值語句nVariable = Expression;n最基本的語句,完成程序里最重要的操作n程序中一般用賦值語句描述賦值動作n例n重寫由三邊求三角形面積的程序n計算中多次用半周長,定義變量保存這個值,可避免重復(fù)計算。n變量的最主要用途:變量的最主要用途:保存計算的中間結(jié)果保存計算的中間結(jié)果#include #include int main () double s; s = (3. + 5. + 7.) / 2.; printf(Area: %fn, sqrt(s*(s-3.)*

13、(s-5.)*(s-7.) ); return 0;用于保存中間結(jié)果賦值運(yùn)算符的值與結(jié)合性nVariable = Expression 整體上被稱為賦值表達(dá)式n賦值表達(dá)式也有值,就是右邊表達(dá)式的值。n賦值表達(dá)式的值通常不用,但賦值表達(dá)式的值也可以用,例n y = (x = 5) + 8;n有時可以用同一表達(dá)式為多個變量賦值。ny = (z = (x = 1.0);n賦值運(yùn)算符的結(jié)合律n從右向左結(jié)合y = z = x = 1.0;簡化賦值與類型n給定賦值表達(dá)式nVariable = Expressionn左邊變量和右邊的表達(dá)值都有類型n規(guī)定n若表達(dá)式值與被賦值變量類型不同,該值先轉(zhuǎn)換到變量類型的

14、值,然后賦值。n在前面程序例子里把賦值語句改寫成:ns = (3 + 5 + 7) / 2;n運(yùn)行時發(fā)現(xiàn)程序的結(jié)果不對,為什么?6. 變量初始化n定義變量時指定變量的初始值。n可用數(shù)值或者數(shù)值表達(dá)式為變量做初始化,如ndouble s = (3 + 5 + 7) / 2.0;nlong double x = 4.5L, y = 3.24L;n初始化只能一次對一個變量做ndouble y = (z = (x = 1.0); /不行!7. 從鍵盤輸入數(shù)據(jù)到變量n請課后查閱并復(fù)習(xí)scanf語句的功能與用法n例#include “stdio.h”main() int n; scanf(“%d”, &a

15、mp;n); printf(“輸入的值為:%d”, n); return 0;%d表示輸入整數(shù)&n表示錄入的數(shù)轉(zhuǎn)換成整數(shù)后放入n中scanf函數(shù)介紹 nscanf 是C語言中與printf對應(yīng)的標(biāo)準(zhǔn)庫函數(shù),用于鍵盤數(shù)據(jù)的輸入。因此,主要用于對變量從鍵盤輸入進(jìn)行賦值。其函數(shù)形式為:nscanf (格式描述串,&變量名,),如:n int a; scanf(“%d”, &a); n char c10; scanf(“%s”, c);n其格式描述串與printf類似,同樣包含以%開始的轉(zhuǎn)換描述。n&變量名可有多個,其個數(shù)和類型與轉(zhuǎn)換描述對應(yīng)。n格式串之后的實(shí)參要求一個

16、指針類型的變量。最常用的轉(zhuǎn)換描述轉(zhuǎn)換描述參數(shù)變量的類型 要求的實(shí)際輸入%dint十進(jìn)制整數(shù)%ldlong同上%ffloat十進(jìn)制浮點(diǎn)數(shù)%lfdouble同上%cchar字符%schar字符串scanf對變量值的輸入(例子)#include int main() int a,b; char s10; printf(“Please input two numbersn”); scanf(“%d%d”,&a, &b); /*必須帶&,除字符數(shù)組和指針變量之外。*/ printf(“Please input a stringn”); scanf(“%s”, s); /不需要帶&

17、amp;. return 0;8. 賦值符與等于n賦值與數(shù)學(xué)中的“等于”完全不同。n例nx = x + 1;n“x = x + 1”在數(shù)學(xué)里為矛盾。nC語言中判斷兩個值是否相等,用運(yùn)算符n=n一定注意不要寫成一個等號9. 值的計算順序問題n下面是合法語句nx = 2.0;ny = (x = 3.0) + x;n問題:n執(zhí)行后y 的值是什么?n這個問題沒有明確答案,因為第二個語句沒有語法錯誤,但是定義不明確。n原因nC語言未規(guī)定加法對兩個運(yùn)算對象的求值順序,這種表達(dá)式的結(jié)果沒有定義。不能寫這種語句!不能寫這種語句!dValue35.7變量double類型名字變量的存儲單元地址:0 x00002f

18、30 10. 變量的屬性圖示規(guī)定存儲的長度和格式double dValue = 35.7;可以用可以用&dValue獲得。獲得。34C語言不同變量分類及其體系nC語言中的數(shù)據(jù)有常量和變量之分,它們都屬于不同的數(shù)據(jù)類型。數(shù)據(jù)類型空類型(void)指針類型(*,&)構(gòu)造類型基本類型整型(int,long)字符型(char)實(shí)數(shù)型(float,double)枚舉型(enum)數(shù)組類型(a)結(jié)構(gòu)體類型(struct)共用體類型(union)三、指針變量簡介從信件投遞、找人、找地方到找存儲空間,保存存儲空間地址的方法指針變量簡介1. 找到目的地的辦法某宿舍宿舍號某辦公室通信地址同學(xué)或快遞

19、根據(jù)宿舍號找到宿舍快遞或郵局根據(jù)通信地址投遞北京交大我校地址根據(jù)地址找到學(xué)校網(wǎng)站地址網(wǎng)站通知書上網(wǎng)站上腦子里信封上信封上或腦子里搜索結(jié)果上腦子里手冊上目的地地址地址保存處根據(jù)地址找到網(wǎng)站2. 回憶數(shù)據(jù)與存儲空間0100000100000000000000000000000000000000存儲空間:以字節(jié)為單位編號普通字符型變量占8位A一個32位int占用的存儲空間一個float型浮點(diǎn)數(shù)所需占用的存儲空間0 x000000000 xFFFFFFFF存儲空間的編號稱為地址0 x000000010 x000000023. 存儲空間地址之用處與獲取n存儲空間地址用處n知道了地址就可能可以訪問存儲空間

20、:往其中存數(shù)據(jù);使用其中保存的數(shù)據(jù)n存儲空間地址獲取途徑n&運(yùn)算符:取已知變量所占用的存儲空間地址n使用存儲空間申請功能向操作系統(tǒng)成功申請存儲空間后,相應(yīng)功能會返回得到的存儲空間地址。(此部分內(nèi)容見后續(xù)講解)n直接使用一些地址常量,如數(shù)組的起始地址4. &運(yùn)算符說明示例nint n = 10;n則&n代表整型變量n所占用的存儲空間的起始地址。n如圖所示,設(shè)n占用了0 x0012FF70-0 x0012FF73這4個字節(jié)的存儲空間n則&n的值為n0 x0012FF70100 x0012FF70n內(nèi)存空間5. 存儲空間地址與保存n計算機(jī)中的內(nèi)外存的存儲空間非常大,可

21、以保存大量的不同類別、不用形式的數(shù)據(jù)。n要對這些數(shù)據(jù)進(jìn)行管理、使用和處理,必須記錄下這些數(shù)據(jù)所處的存儲位置地址,否則無法找到這些數(shù)據(jù)。n在許多高級語言中,提供一類用來記錄存儲空間地址的變量,這種變量一般被稱為指針變量。n注意:通過變量直接操作存儲空間的地址既方便又容易出錯。某些高級語言如JAVA不再設(shè)置指針變量,而通過其它機(jī)制實(shí)現(xiàn)動態(tài)存儲管理。6. 指針變量n指針變量n用于保存某種類型的存儲空間起始地址的變量。n語法: 基類型 * 變量名;n例nint *pInt; /*指向整型變量的指針變量*/ndouble *pDouble; /*指向?qū)嵭妥兞康闹羔樧兞?/nchar *pChar; /*

22、指向字符型變量的指針變量*/7. 指針變量的常見用法示例n示例1nint n;nint *pInt;npInt = &n; /取n的地址放在pInt中n示例2nint *pInt;npInt = (int *)malloc() /申請一塊存儲空間并將其地址存入pInt中;n示例3nint *pInt, narr10; /narr為一個數(shù)組npInt = narr; /使pInt中保存數(shù)據(jù)的起始地址8. 間接運(yùn)算符*n指針的間接運(yùn)算符: *n如給定表達(dá)式*pInt,表示先取指針變量pInt中所存的地址值addr,然后再將addr所在的整型存儲空間中的值取出來作為表達(dá)式的值。n如nint

23、n = 100, m, *p;np = &n;nm = *p + 1; 0X0012FF701000X0012FF700X0012FF68pn1010X0012FF6Cmm的值將為的值將為1019. 指針變量與存儲單元關(guān)系圖示0X0012FF78指針變量p1550X0012FF78100X0012FF70550X0012FF78每格代表4個字節(jié)int *p1;int n = 55;int *p2;int m = 10;p1 = &n;p2 = &m;0X0012FF700X0012FF740X0012FF780X0012FF7Cmp1p2n*p1的值為55,*p2的值為

24、10問,執(zhí)行 *p1 = 100;會產(chǎn)生什么影響?10. 指針變量的類型n指針變量中保存某種類型變量存儲空間的地址n存儲單元的地址值是有類型的,如n存儲int值的存儲單元的地址的類型是 int *n存儲double值的存儲單元的地址的類型是double *n存儲char值的存儲單元的地址的類型是char *n不同類型值存儲單元的地址值屬于不同的類型nint * 和 char *屬于不同的類型ndouble * 和 int * 屬于不同的類型nshort * 和 long * 屬于不同的類型n地址值類型的不同意味著不能將類型不同的地址值賦給基類型不同的指針變量。四、構(gòu)造數(shù)據(jù)類型Construct

25、ed Data Types簡單數(shù)據(jù)類型復(fù)雜數(shù)據(jù)類型1. 復(fù)雜數(shù)據(jù)類型描述的需求n如何描述一組類型相同的數(shù)據(jù)?n一個醫(yī)院1年就診患者的年齡(假設(shè)平均是100萬人)n一個高中學(xué)校畢業(yè)學(xué)生列表n一個高等院校入學(xué)學(xué)生的總成績n如何描述身份證信息?n包括身份證號,姓名,性別,籍貫,出生日期,住址,有效期等信息n中國有超過13億人口n如何描述學(xué)籍管理系統(tǒng)中的學(xué)生?n包括姓名,性別,年齡,來源省市,入學(xué)成績,身份證信息等n如何實(shí)現(xiàn)對不同省市學(xué)生年齡的排序分析?n等等2. 復(fù)雜數(shù)據(jù)類型的特點(diǎn)n數(shù)據(jù)不是孤立的,都是相互關(guān)聯(lián)的,數(shù)據(jù)之間具有關(guān)系n一個對象可能具有一組類型相同的數(shù)據(jù)n一個對象可能具有許多不同的屬性n

26、例n一個班級里具有許多學(xué)生n一個自然人具有許多不同的屬性如果只有基本數(shù)據(jù)類型n100萬就診患者年齡需要定義和處理100萬個不同名稱的變量。n13億中國人如何定義變量和進(jìn)行相關(guān)計算處理?n相關(guān)聯(lián)的計算需求:如計算一個班級女生的年齡分布如何實(shí)現(xiàn)?3. 構(gòu)造數(shù)據(jù)類型n構(gòu)造數(shù)據(jù)類型n根據(jù)已定義的一個或多個數(shù)據(jù)類型用構(gòu)造的方法來定義新的數(shù)據(jù)類型。n也就是說,一個構(gòu)造類型的值可以分解成若干個“成員”或“元素”。n每個“成員”都是一個基本數(shù)據(jù)類型或又是一個構(gòu)造類型。4. 同類數(shù)據(jù)集合的描述辦法n給定一個集合S = e1, e2, , en,如何用高級語言去描述和使用這樣的集合?n最簡單的辦法n數(shù)組array

27、n固定長度的按順序排列的一組相同元素的集合n其它表示辦法考慮的因素n長度不固定n不一定非得在內(nèi)存里挨著放5. 具有許多屬性的對象描述辦法n給定現(xiàn)實(shí)世界中的一類對象Object,設(shè)其具有屬性集AS = a1, a2, , an,如何去描述這樣的對象?n如,對于人,具有姓名,出生日期,身份證號,籍貫,民族等屬性,如何表示?n在各種高級語言中都提供了不同的表示辦法nC語言中的structnPASCAL中的recordn各種面向?qū)ο蟪绦蛟O(shè)計語言中的class等五、數(shù)組array數(shù)組的重要意義: 以統(tǒng)一的方式描述一組數(shù)據(jù),從而為方便地對一組數(shù)據(jù)實(shí)現(xiàn)統(tǒng)一的數(shù)據(jù)處理奠定基礎(chǔ)。1. 數(shù)組的概念、分類和定義n概

28、念n數(shù)組是一種構(gòu)造類型,它是由具有同一種更基本類型的數(shù)據(jù)按順序組織在一起的有序整體。n數(shù)組中的元素通過下標(biāo)來索引。n按維數(shù)分類n一維數(shù)組n二維數(shù)組n三維數(shù)組n更高維數(shù)組2. 數(shù)組的定義n一維數(shù)組定義語法 n ;n如nint a50; ndouble b322;nint c=1,2;n二維數(shù)組定義語法n MNn如nint a34;nint days7=1,2,3,4,5,6,7,0,3,5,7,9,2,1;3. 數(shù)組元素編號及存儲a0 a1a2 an-2 an-1 n每個元素的類型都相同n每個元素的類型可以是任何合法的類型(基本類型、數(shù)組、指針、結(jié)構(gòu)、)n每個元素在內(nèi)存中按編號順序緊挨著連續(xù)存放

29、C的數(shù)組元素編號規(guī)則(i = 0 n-1),首元素(第第1個元素個元素)序號為0,依次類推順序編號,i稱為下標(biāo)。4. 多維數(shù)組的定義nint nArr100;nint nTwoDimArr105; 也可以看是一維數(shù)組nint nThreeDimArr356; 也可以看成是一維和二維數(shù)組5. 數(shù)組的基本使用規(guī)則n訪問某個數(shù)組元素,使用下標(biāo)運(yùn)算符,優(yōu)先級最高。n運(yùn)算對象是數(shù)組名和括號里表示下標(biāo)的表達(dá)式。n一維數(shù)組使用舉例int narr10, i;i = 5; narri = 20; /將第6個元素置成20n二維數(shù)組使用舉例int nTwoDimArr105, i, j;i = 0;j = 2;n

30、TwoDimArrij = 100; /將第0行第2列的元素置成1006. 數(shù)組名稱與數(shù)組元素地址計算nC規(guī)定,數(shù)組的名稱代表數(shù)組的起始地址值。n若有定義: int narr10;n則,narr代表整個數(shù)組的起始地址。n取數(shù)組元素的地址的方法為在數(shù)組元素前加&,如n&narri 表示取數(shù)組第i+1個元素的地址n對于該數(shù)組中的第i+1個元素,narri的地址為nnarr + i* sizeof(int)nsizeof用于獲取其中的類型或變量的大小。n即假設(shè)narr的值為1000,sizeof(int)為4n則narr3的地址1000 + 12 =1012,即表達(dá)式&nar

31、r3的值為1012。數(shù)組的初始化nC語言允許定義時給數(shù)組直接進(jìn)行初始化nint a4=1,2,2,4;ndouble ax6=1.3,2.24,5.11,8.37, 6.5; n也允許只給前一段元素指定初始值nint b14=1,2; 其余的則自動初始化為0。n如果給出了全部元素,則可以不寫數(shù)據(jù)大小nint fib1=1,2,3,4,5;數(shù)組名就是指針n數(shù)組名與指針的異同點(diǎn)n數(shù)組名只不過是指向第一個數(shù)組元素的指針。n數(shù)組名不是一般的指針變量,是一個指針常量。valsvals的值的值不能修改!不能修改!即不能出現(xiàn)即不能出現(xiàn)valsvals=&b;=&b;數(shù)組寫法與指針寫法n如果一

32、個指針指向一個數(shù)組的元素,通過指針訪問數(shù)組元素的操作也可用下標(biāo)形式寫。n設(shè)p1指向數(shù)組a0,p3指向a5??蓪懀?nint *p1, *p, a10; p1=a; p3=&a5;p=a; np13 = 5; p32 = 8; pin*(p1+3)=5; *(p3+2)=8; *(p+i)np13一類寫法稱為數(shù)組寫法,*(p1+3)一類寫法稱為指針寫法。n兩類寫法有等價效力,可以自由選用。數(shù)組使用程序例子int *p1, *p2,*p3,*p4;int a10=1,2,3,4,5,6,7,8,9,10;p1=&a0; /與a的值一樣。p2=p1;p3=&a5;p4=&am

33、p;a10;n指針p1和p2都指向a的首元素,p3指向元素a5。np4指向數(shù)據(jù)a最后元素之后的下一個位置。C語言保證“數(shù)組之后一個位置”的地址一定存在,但不能進(jìn)行間接訪問。652021-12-29數(shù)組名的使用n對數(shù)組名求值得到指向數(shù)組首元素的指針值n 數(shù)組名可以看作是指針常量,可參與一些指針運(yùn)算,與其他指針比大小,比較相等與不相等。n通過數(shù)組名的元素訪問也可以采用指針寫法。na3可寫為*(a+3)。n注意n數(shù)組名不是指針變量,特別是不能賦值,不能更改。若a為數(shù)組,下面操作都是錯誤的:na+;a += 3;a = p; /p是另一個指針。n有些運(yùn)算雖不發(fā)生賦值但也可能沒意義。如 a3 可能得不到

34、有意義的指針值,因其結(jié)果超出數(shù)組界限。六、結(jié)構(gòu)體struct具有多個屬性的對象的描述辦法1. C的結(jié)構(gòu)體及定義n結(jié)構(gòu)體n將事物或事件的不同屬性組織在一起作為一個整體來對待。n結(jié)構(gòu)體是面向?qū)ο蟪绦蛟O(shè)計中的類的基礎(chǔ)。n結(jié)構(gòu)說明和變量定義由struct關(guān)鍵字引導(dǎo),具有二種基本形式第一種:第一種:struct 類類型標(biāo)記型標(biāo)記 成員列表成員列表 變量聲明變量聲明;第二種:第二種:struct 類類型標(biāo)記型標(biāo)記 成員列表成員列表;struct 類型標(biāo)記類型標(biāo)記 變變量聲明量聲明;2. 實(shí)例n校園一卡通系統(tǒng)需要描述每一個用戶的如下信息n用戶ID,姓名,身份證號,性別,卡余額n其中n用戶ID為14位學(xué)號n姓

35、名不超過10漢字n身份證號18位n性別用M和F表示男女n卡余額為雙精度浮點(diǎn)數(shù)。實(shí)例結(jié)構(gòu)體說明struct UserAccount char szUserNO15; char szName20; char szID19; char cGender; double dBalance; User, Users100, *pUser;struct UserAccount char szUserNO15; /用戶ID char szName20; /姓名 char szID19; /身份證號 char cGender; /性別 double dBalance; /卡余額;struct UserAccou

36、nt User, Users100, *pUser;User為一個普通的結(jié)構(gòu)體變量;Users是一個長度為100的結(jié)構(gòu)體數(shù)組;pUser是一個指針變量,用于存放該類型結(jié)構(gòu)體變量的所占存儲空間的地址;結(jié)構(gòu)體數(shù)據(jù)實(shí)例圖示用戶ID姓名身份證號性別卡余額08120001 張帥帥110108M0.10結(jié)構(gòu)體類型結(jié)構(gòu)體實(shí)例化08120099 李美美350108F500.00struct UserAccount char szUserNO15; char szName20; char szID19; char cGender; double dBalance;struct UserAccount User,

37、 Users100, *pUser; 4. 結(jié)構(gòu)體數(shù)組實(shí)例08120001081200990812000708120007 張帥帥 李美美 趙小飛 羅小花110108350108360108410108MFMF0.10500.0020.0088.20長度為n的結(jié)構(gòu)體(記錄)數(shù)組,其中每個元素是一個結(jié)構(gòu)體(記錄)Users1005. 結(jié)構(gòu)體的使用規(guī)則n訪問結(jié)構(gòu)體成員,采用分量運(yùn)算符.n結(jié)構(gòu)體變量.結(jié)構(gòu)體成員n例如nUser.cGender =F;nUser.dBalance += 10.2;n結(jié)構(gòu)體變量的地址等價于第一個成員的地址n結(jié)構(gòu)體指針變量用于存放結(jié)構(gòu)體的地址n對于前面的定義,若令pUse

38、r = &Users5;n則pUser將保存結(jié)構(gòu)體數(shù)組中的第6個元素的地址n通過結(jié)構(gòu)體指針變量訪問結(jié)構(gòu)體,使用-運(yùn)算符npUser-cGender = M;npUser-dBalance += 11.5;七、聯(lián)合(共用體)Union裘宗燕書p254頁1. 定義nunionn形式與struct類似,但是實(shí)質(zhì)有很大的不同n提供一種若干個不同的名字共享(共用)一段存儲空間的手段,但是同一時刻只有能一個名字有實(shí)際意義。n如如union data int n; double x; char c;使用方法與結(jié)構(gòu)體類似,區(qū)別在于所有成員共享同一段固定長度的存儲空間 成員 c 的存儲位置和范圍 成員

39、n 的存儲位置和范圍 聯(lián)合 union data 的表示 成員 x 的存儲位置和范圍 2.聯(lián)合變量的存儲實(shí)現(xiàn)n成員共用同一存儲位置,存儲區(qū)大小由成員共用同一存儲位置,存儲區(qū)大小由大成員大成員決決定。對定。對union data,n是整數(shù),是整數(shù),d是雙精度數(shù),是雙精度數(shù),c是字符。需要足以存放雙精度數(shù)的存儲區(qū)。成員是字符。需要足以存放雙精度數(shù)的存儲區(qū)。成員安排如下圖:安排如下圖:3.聯(lián)合變量的初始化和使用n聯(lián)合變量可以在定義時直接初始化,但這個初始聯(lián)合變量可以在定義時直接初始化,但這個初始化只能對化只能對第一個成員第一個成員做。做。n例例union data u1 = 3, u2 = 5;n聯(lián)

40、合變量使用形式與結(jié)構(gòu)變量相同,可聯(lián)合變量使用形式與結(jié)構(gòu)變量相同,可整體賦值整體賦值、成員訪問、取地址。如:成員訪問、取地址。如:n = u1.n;u1.c = n;m = u2.n + 167;n可定義指向聯(lián)合的指針,可從這種指針出發(fā),通可定義指向聯(lián)合的指針,可從這種指針出發(fā),通過過-運(yùn)算符訪問被指聯(lián)合變量的成員。運(yùn)算符訪問被指聯(lián)合變量的成員。八、枚舉類型n枚舉是一種用于定義一組命名常量的機(jī)制,以這種方式定義的常量一般稱為枚舉常量??梢詫@組枚舉常量進(jìn)行命名,形成枚舉數(shù)據(jù)類型。用于定義新的枚舉變量。枚舉類型的定義形式為:nenum 枚舉標(biāo)志 枚舉常量元素名, .;n如:enum color RED, GREEN, BLUE;n枚舉標(biāo)志的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論