目錄:
一、
常量
二、
標識符
三、
變量
四、
表達式
五、
輸入輸出函數(shù)
六、
C語言的語句
七、
C程序的基本結(jié)構(gòu)
八、
選擇結(jié)構(gòu)語句
if(表達式) 語句1 else 語句2
條件運算符 表達式1? 表達式2 : 表達式3
switch語句
九、
循環(huán)結(jié)構(gòu)
for循環(huán)語句
while循環(huán)語句 do while循環(huán)語句
十、
數(shù)組
十一、
字符串函數(shù)
十二、
函數(shù)
十三、
指針
十四、
宏定義
十五、
結(jié)構(gòu)體,共用體,枚舉類型
=================================================================================================
一、 常量
數(shù)字常量
i. 普通數(shù)字:1,35,2.7
ii. 指數(shù)形式:2.45e-2等價于2.45*10-2 注意e大小寫皆可,e前面的數(shù)字不能省,就算是1也不能省,后面的數(shù)字一定要是整數(shù)
iii. 長整型,單精度浮點型:3235L,32.5F 分別表示3235是長整型數(shù)據(jù),32.5是單精度浮點型左,若不寫上L,F則表示3235是整型,32.5是雙精度浮點型,L,F大小寫皆可
字符常量
iv. 普通字符常量:用單引號把一個字符括起來,如’A’,’@’
v. 轉(zhuǎn)義字符常量:一對單引號括起來并以“\”開頭的字符序列,如’\n’(回車)、’\123’(8進制123對應(yīng)的字符), ’\x23’(16進制23對應(yīng)的字符)
字符串常量
用一對雙引號把一個字符序列括起來,如“ABCef”, 系統(tǒng)存放字符串常量,每個字符分配一個字節(jié),各字符所占字節(jié)緊鄰,并且字符串末尾會給再開一個字節(jié)里面放一個’\0’做為結(jié)束標志。
符號常量
定義格式 #define 符號常量名 符號常量值,如#define N 20則定義了符號常量N,其值為20,注意符號常量名和符號常量值之間是用空格隔開,而不是寫上=號,#define和符號常量名之間也有空格的。
題目:P7—1,5,6,7,9,10
二、 標識符
命名規(guī)則
以數(shù)字,字母,下劃線這三類字符組成,但只能以字母或下劃線開頭,而不能也數(shù)字開頭,另外不能將關(guān)鍵字做為標識符。32個關(guān)鍵字表在P365附錄B
變量名,函數(shù)名,符號常量名全都是標識符
題目:P7—2,3,4
三、 變量
變量的定義格式
類型名 變量名;
如 int a;定義了一個整型常量a。變量名是由人類隨便定義的,符合命名規(guī)則的前提下,愛寫啥就寫啥。所以什么flag,cc,y1或者函數(shù)名fun,find等全部是自定的用來做為名字而已,沒有更特別的意義。
類型名
int 整型,long 長整型: 用于存放整數(shù),只是數(shù)值范圍不同
float 單精度浮點型 double 雙精度浮點型:用于存放實數(shù),數(shù)值范圍,精度不同
char字符型:用于存放字符
變量賦值,初始化
int a=3;定義的同時初始化
a=6*9;定義后在程序中進行賦值
變量的值
只有在賦值操作時才會被改變,即將其放在等號左邊時才會改變它的值,或自增自減操作:a=5,a++,a--,像a+3并未改變a的值,只是使用了a的值而已.
自增自減運算
變量++,++變量,變量--,--變量 使變量的值自增1或自減1
等價于 變量=變量+1 變量=變量-1
++,--放于變量前后效果的區(qū)別:
當自增自減運算做為表達式的一部分時,++,--放在變量前面是先自增自減再使用變量的值,放在變量后面則是先使用變量的值,再自增自減。
如x=3; printf(“%d”,++x);則相當于執(zhí)行了++x; printf(“%d”,x);這樣的操作所以打印出4
再如x=3; printf(“%d”,x++);則相當于執(zhí)行了printf(“%d”,x); x++;這樣的操作,則打印出3,當然最后x的值還是4。
四、 表達式
運算符和運算對象
一個運算符都有若干個運算對象,如 + 必然要跟兩個運算對象才能進行加法運算:3+5。C語言里稱需要跟n個運算對象的運算符為n元運算符。
一元運算符有:!,(類型名)
二元運算符有:+,-,*,/,%(求余), =,+=,-=,*=,/=,%=,< , > , <=, >=, = =(等于), !=(不等于),&&(且) , ||(或)
多元運算符有: ,
運算符的優(yōu)先級和結(jié)合性
i. 優(yōu)先級:同一個運算對象左右兩邊若同時有兩個運算符,則這兩個運算符優(yōu)先級高的先進行運算。
ii. 結(jié)合性:若同一個運算對象左右兩邊的兩個運算符優(yōu)先級相同,則根據(jù)結(jié)合性判斷先進行哪個運算,自左自右結(jié)合性的先算左邊的運算符,自右自左的先算右邊的運算符。
iii. 各運算符的優(yōu)先級和結(jié)合性見P365附錄C
強制類型轉(zhuǎn)換
格式: (類型名) 表達式 。將后跟的表達式的值的數(shù)據(jù)類型轉(zhuǎn)換為與圓括號內(nèi)的類型名一致的類型。注意類型名一定要用() 括起來。
算術(shù)表達式
iv. 算術(shù)運算符:+,-,*,/,%(求余)
v. 由算術(shù)運算符加上運算對象構(gòu)成算術(shù)表達式,如3+3*6-9/2
vi. 值:跟我們小學時學的一樣,就是表達式的計算結(jié)果
vii. 整數(shù)除以整數(shù)結(jié)果取整數(shù)部分,故1/3得到的值是0
viii. 5%3 結(jié)果為2,想想小學除法,求余得到的是余數(shù)不是商。
賦值表達式
ix. 賦值運算符:=,+=,-=,*=,/=,%=
x. 賦值表達式:變量=表達式,如x=3+6,x+=6-9,x+=x*=3+4 注意等號左邊只能是變量
xi. 復合賦值運算符的運算:以/=為例:x/=表達式 等價于 x=x/(表達式)
xii. 值:=號左邊的變量最終的值
關(guān)系表達式
xiii. 關(guān)系運算符:< , > , <=, >=, = =(等于), !=(不等于)
xiv. 由關(guān)系運算符加上運算對象構(gòu)成關(guān)系表達式,如3>=4, 2==a
xv. 值:滿足相應(yīng)運算符所指定的關(guān)系的值為1,否則為0
邏輯表達式
xvi. 邏輯運算符:&&(且) , ||(或) , !(非)
xvii. 由邏輯運算符加上運算對象構(gòu)成邏輯表達式,如3&&4, x||!y
xviii. 值:滿足相應(yīng)運算符所指定的關(guān)系的值為1,否則為0
xix. 進行 ||或 運算時,若||左邊的表達式值為1,則不再對右邊的表達式進行運算。
xx. 進行 &&且 運算時,若&&左邊的表達式值為0,則不再對右邊的表達式進行運算。
逗號表達式
xxi. 逗號運算符: ,
xxii. 用逗號將各種表達式連續(xù)起來構(gòu)成逗號表達式,如3+4,a=9,8*a
xxiii. 值:組成逗號表達式的各個表達式中的最后一個的值,如上例為8*a
題目:P7—11~17
P8—18~33
五、 輸入輸出函數(shù)
scanf(“格式控制串”,變量地址表列);
如scanf(“%d%c%d”,&a,&ch,&b); scanf(“O”,&x);
注意:
i. 格式控制串可控制截取用戶輸入的前幾個字符給變量,但不能控制輸入幾位小數(shù)給變量,如不能寫成scanf(“%4.2f”,&x);
ii. 第二個參數(shù)給的是地址,即要么是&+變量名或數(shù)組元素名的形式,要么就是一個數(shù)組名或指針變量名,如int *p,a; p=&a; scanf(“%d”,p);
iii. 考試時注意看題目給你寫好的scanf的格式
1. 若其格式控制串內(nèi)各格式符用“,”隔開如scanf(“%d,%c,%d”,&a,&ch,&b);那輸入時也要用逗號隔開,如此例輸入時應(yīng):3,+,5
2. 若是這種格式scanf(“%d %d”,&a,&b);則輸入時應(yīng):3 5;
3. 若是這種格式scanf(“%d%c%d”,&a,&ch,&b);則輸入時應(yīng)3+5,若寫成3 + 5則a=3,ch=‘ ’(空格),b=任意值 (自己上機運行看看結(jié)果)
printf(“格式控制串”,輸出項表列);
如float x=7.5; printf(“%8.2f”,x);此處的意思是將x打印出來,且占8列,保留兩位小數(shù)。自己上機運行看看效果。
常用格式符匯總:
iv. %d:輸入輸出整型數(shù)據(jù),%ld:輸入輸出長整型數(shù)據(jù)
v. %c:輸入輸出字符型數(shù)據(jù)
vi. %f:輸出單(雙)精度浮點型數(shù)據(jù),輸入單精度型數(shù)據(jù)。 %lf:輸入雙精度型數(shù)據(jù)
vii. %s:輸入輸出一個字符串,用printf輸出字符串時,輸出項書寫時可為字符串常量,或字符數(shù)組名。如printf(“%s”,”hello”);或char str[10]=”hello”; printf(“%s”,str);
viii. %u:輸入輸出無符號整型,%o:輸入輸出八進制數(shù),
%x:輸入輸出十六進制數(shù)
getchar();
函數(shù)調(diào)用后返回用戶輸入的一個字符,故需再定義一個變量來存放這個字符,即使用時應(yīng) char c; c=getchar();意思就是接收用戶輸入的一個字符,并將其賦值給變量c。
putchar(字符常量或字符變量名);
如char c=’A’; putchar(c);或putchar(‘A’);都會向屏幕輸出字符A。
六、 C語言的語句
表達式語句:由表達式末尾加上分號構(gòu)成。
函數(shù)調(diào)用語句:由函數(shù)調(diào)用表達式加上分號構(gòu)成。
空語句: ;
選擇結(jié)構(gòu)語句:if語句 switch語句
循環(huán)語句:for語句 while語句 do while語句
復合語句:用花括號{}將以上任意語句括起來構(gòu)成一條復合語句。
七、 C程序的基本結(jié)構(gòu)
void main()
{ 聲明部分:用來定義變量和聲明自定義函數(shù)的原型,需以“;”結(jié)尾,如int x;
執(zhí)行語句部分:第六點里介紹的各種語句,如x=3;printf(“%d”,x);
}
main函數(shù)外可寫自定義函數(shù)。如
int max()
{
return 0;
}
八、 選擇結(jié)構(gòu)語句
if(表達式) 語句1 else 語句2
如果if語句的圓括號內(nèi)的表達式值為非0,則執(zhí)行語句1,值為0則執(zhí)行語句2。
i. 表達式可為任意表達式,if語句執(zhí)行的實質(zhì)是判斷表達式的值是否為0來決定執(zhí)行語句1還是語句2。另外請在此處表達嚴重關(guān)切,不管是高手還是菜鳥經(jīng)常會把判斷兩個數(shù)相等的符號“==”寫成了一個等號“=”成為了賦值運算,這樣的寫法不會引發(fā)編譯錯誤,但結(jié)果會與原意大大不同,所以考試前請再三提醒自己。
ii. 語句1和語句2都只能是一個語句,若要跟多條語句,切記用一對{}括起來,構(gòu)成復合語句;也不要隨便在圓括號后加“;” ,因“ ;”構(gòu)成一條空語句,這會使后面跟的語句1不再屬于if語句的組成部分。
iii. if語句的三種結(jié)構(gòu)
1. 單邊: if(表達式) 語句
2. 雙邊:if(表達式) 語句1 else 語句2
3. 多層(重點掌握):
if(表達式1) 語句1
else if(表達式2) 語句2
else if(表達式3) 語句3
…
else 語句n
條件運算符 表達式1? 表達式2 : 表達式3
若表達式1的值非0,則取表達式2的值做為整個表達式的值,否則取表達式3的值為整個表達式的值。如 3>4? 1:2 該表達式的值為2
switch語句
switch(表達式)
{
case 表達式1:語句
case 表達式2:語句
…
case 表達式n:語句
default: 語句
}
語句執(zhí)行過程:先計算表達式的值,然后判斷該值與表達式1到表達式n中的哪個相等,若與表達式i的值相等,則執(zhí)行表達式i后的所有語句,當遇到break;語句時結(jié)束整個switch語句的執(zhí)行。表達式1到表達式n的值都不相等的情況下執(zhí)行default后跟的語句。每個case后可跟多條語句。
九、 循環(huán)結(jié)構(gòu)
for循環(huán)語句
for(表達式1;表達式2;表達式3) 循環(huán)體語句
語句執(zhí)行過程:
1. 計算表達式1
2. 判斷表達式2的值是否為0,若為0,語句執(zhí)行結(jié)束,若不為0,進入步驟3
3. 執(zhí)行循環(huán)體語句(需注意的是循環(huán)體語句只能有一個語句,若要包含多個語句要用一對{}括起來,構(gòu)成一條復合語句,此處也不要隨便加上 “ ; ”,因一個“;”可構(gòu)成一條空語句,這會使得后面真正的循環(huán)體語句不屬于for循環(huán)語句的部分)。進入步驟4
4. 計算表達式3,然后重新進入步驟2
while循環(huán)語句 do while循環(huán)語句
i. while(表達式) 循環(huán)體語句
執(zhí)行過程:
1. 判斷表達式的值是否為非0,若是進入步驟2,否則結(jié)束語句執(zhí)行。
2. 執(zhí)行循環(huán)體語句,重新回到步驟1。
ii. do 循環(huán)體語句 while(表達式);
執(zhí)行過程:
1. 執(zhí)行循環(huán)體語句,進入步驟2
2. 判斷表達式的值是否為非0,若是重新回到步驟1,否則結(jié)束語句執(zhí)行。
這里要注意的地方跟for語句一樣,即循環(huán)體語句只能有一個語句,若要包含多個語句要用一對{}括起來,構(gòu)成一條復合語句,此處也不要隨便加上 “ ; ”,因一個“;”可構(gòu)成一條空語句,這會使得后面真正的循環(huán)體語句不屬于while循環(huán)語句的部分,另外do while循環(huán)的while(表達式)后是要加“;”的。
break語句:放在循環(huán)體內(nèi)實現(xiàn)的功能是結(jié)束其所在的那層循環(huán)的執(zhí)行。
十、 數(shù)組
定義格式:數(shù)據(jù)類型 數(shù)組名[整型常量];如 int a[10]; 定義了一個整型數(shù)組,數(shù)組名為a,這個數(shù)組含有10個元素。
引用數(shù)組元素: 格式:數(shù)組名[下標] 切記下標值從0開始。下標可為常量,表達式,變量等,如int i=3; a[0]=5;a[3*2]=9; a[i]=7;
初始化:數(shù)據(jù)類型 數(shù)組名[整型常量]={數(shù)據(jù)表列};將數(shù)據(jù)表列的各個值依次賦值給數(shù)組的各個元素。如int a[5]={0,1,2,3,4};則數(shù)組a各元素a[0]到a[4]的值分別為0,1,2,3,4
遍歷數(shù)組元素
數(shù)組定義后,我們不能對數(shù)組進行整體的操作,如int a[10];不能用a=3這樣的操作將數(shù)組的各元素都賦值為3;而只能一個一個元素的進行賦值,如a[0]=3;a[1]=3;a[2]=3…a[9]=3; 當然此時我們就可以借助于一個for循環(huán)來控制下標的變化從而對數(shù)組的各個元素進行賦值
for(i=0;i<10;i++) a[i]=3;
當然這只是用for循環(huán)遍歷數(shù)組各元素的最簡單的例子,一般考試考的是找出數(shù)組元素的某種特性的極值,比如最大值,最小值,或?qū)?shù)組各元素進行排序,這時我們就可以使用for循環(huán)來遍歷數(shù)組的各元素,然后在當前循環(huán)中得到一個元素再對其進行處理。如i=2時訪問到的元素是a[2],你就可以問問它,你是不是最小值啊。
整型數(shù)組
int a[10]; 整型數(shù)組里的各個元素存放的是整數(shù)。a[3]=3;
字符型數(shù)組
char str[20];字符型數(shù)組里的各個元素存放的是字符。 str[3]=’A’;
十一、 字符串函數(shù)
gets(字符數(shù)組名或字符指針變量);
如char str[10],* str2; str2=str;則gets(str);或gets(str2);都是接收用戶輸入的字符串如“ABC”存入到字符數(shù)組str中
puts(字符數(shù)組名或字符指針變量或字符串常量);
如char str[10]=”china”;
char *str2;str=str2; 則puts(str); 或puts(str2); 或 puts(“china”);都會在屏幕上打印出 china
strlen(字符數(shù)組名或字符指針變量);字符串測長函數(shù)
char str[20]=”hello world!”;
int len;len=strlen(str);得出的結(jié)果是len的值為12
strcat(字符串1的地址,字符串2的地址);
將字符串2的內(nèi)容連接到字符串1的尾部。
char str1[20]=”ABC”,str2[20]=”xyz”;
strcat(str1,str2);
則程序運行的結(jié)果是str1內(nèi)存放的字符串變?yōu)?/font>ABCxyz,當然str2存放的字符串還是xyz。
strcmp(字符串1的地址,字符串2的地址);
比較串1和串2哪個比較大。比較大小的依據(jù)是,兩個字符串從左往右相應(yīng)位置上第一個不相等的字符ASCII碼值之差。
char str1[20]=”ABCE”,str2[20]=”ABDE”;
int i;
i=strcmp (str1,str2);
第一個不相等的字符為str1的‘C’和str2的‘D’,而二者相差-1,故-1做為strcmp函數(shù)執(zhí)行的結(jié)果返回到被調(diào)用的位置,該位置位于賦值表達式內(nèi),故將其值賦值給i,即此時i的值就是-1.
strcpy(字符串1的地址,字符串2的地址);
將字符串2的內(nèi)容復制到字符串1內(nèi)。
char str1[20]=”ABC”,str2[20]=”xyz”;
strcpy(str1,str2);此時str1的內(nèi)容為”xyz”,當然str2的內(nèi)容沒變
strcpy(str1,”uvw”);此時str1的內(nèi)容又變成了“uvw“。
十二、 函數(shù)
函數(shù)定義
函數(shù)類型 函數(shù)名( 形式參數(shù)列表 )
{
內(nèi)部變量定義和聲明部分
執(zhí)行語句
}
如:
int max (int x , int y )
{ int z ;
z= x > y x : y ;
return ( z ) ;
}
注意點:
1.函數(shù)類型是指返回值的類型,即要與return語句后跟的表達式的值的類型一致。若函數(shù)類型為void則說明該函數(shù)無返回值,即函數(shù)體里不能出現(xiàn)return 語句。
2.形式參數(shù)列表里定義的變量要記得給它們指定類型,而且如果同時要定義多個,應(yīng)在每個前面都分別指定類型名,而不能寫成int x,y;
3.函數(shù)體里能寫的語句跟main函數(shù)一樣,在開頭可定義所需要的變量,后面跟上一堆執(zhí)行語句。
函數(shù)調(diào)用流程
以上面的函數(shù)為例,在main函數(shù)進行調(diào)用:
void main()
{ int a,b,c;
scanf(“%d%d”,&a,&b);
printf(“%d”,max(a,b));或 c=max(a,b);printf(“%d”,c)以上兩種方法都會在屏幕中打印出a,b間的較大值。
調(diào)用函數(shù)的格式 函數(shù)名(實際參數(shù)列表);調(diào)用的時候像什么函數(shù)類型,形式參數(shù)的類型就不要加上去了。max(a,b)中max就是函數(shù)名,寫上變量名a,b是實際參數(shù)列表,執(zhí)行這個調(diào)用語句時,會先把a,b的值給相應(yīng)位置的形式參數(shù)即執(zhí)行了x=a,y=b這樣的操作,然后開始執(zhí)行max函數(shù)的函數(shù)體的語句。當max函數(shù)體里執(zhí)行到一個return語句時,則max函數(shù)結(jié)束執(zhí)行,將return后的表達式的值返回給main函數(shù)調(diào)用max函數(shù)的那個位置,即若上面a=3,b=5則max(a,b)return后的表達式的值應(yīng)該是5也就是說執(zhí)行完max后把5返回到調(diào)用max的位置可看成printf(“%d”,5);或另一種解法的c=5。
}
十三、 指針
指針變量的聲明: 類型名 * 指針變量名;
通過指針變量訪問它所指向的普通變量的值
先將普通變量的地址賦值給指針變量,再通過指針運算符* 得到普通變量的值。
int *p,x,y;
x=3;
p=&x;
則printf(“%d”,*p);會打印出3即x的值
y=*p;則y的值變?yōu)?/font>3
*p=5;則x的值變?yōu)?/font>5
指針變量加上(減去)一個位移的效果
若指針變量存入的是數(shù)組元素的地址,則其加一減一得到的是那個數(shù)組元素下一個或前一個元素的地址。
int a[10]; p=&a[3];
*p得到的是a[3]的值。
若p++;此時p存放的是a[4]的地址&a[4]; *p得到的就是a[4]的值。
或p--;此時p存放的是a[2]的地址&a[2],*p得到的就是a[2]的值。
行指針
i. 主要是對于二維數(shù)組來說的,二維數(shù)組每行都有自己的地址,第0行地址用 數(shù)組名 表示,第i行地址為 數(shù)組名+i;而想要得到二維數(shù)組里一個元素的地址,必需先得到其所在行的地址,然后再由那個地址得到元素的地址,比如說 int a[3][4];定義了一個二維數(shù)組,該二維數(shù)組第0行的地址為a,第1行的地址為a+1,第2行的地址為a+2,想從行的地址得到元素的地址,需在行地址前加上指針運算符“*”,即*a就是第0行首個元素的地址即a[0][0]的地址,而a[0][2]的地址就是在a[0][0]的地址基礎(chǔ)上加上位移量2,即*a+2,然后想得到a[0][2]這個元素的值呢就再加上一個指針運算符“*”,即*(*a+2),類似地,想得到a[2][2]這個元素的值呢就是*(*(a+2)+2)
ii. 定義行指針變量: 類型名 (*變量名)[數(shù)組長度];
如int (*p)[4],a[3][4]; p=a;此時就可把p當成a來用,用法同上所述。
判斷是否合法訪問數(shù)組元素:若是指針法訪問,判斷指針后跟的是否地址;若是下標法訪問,判斷下標有無越界。
函數(shù)指針:函數(shù)名即為函數(shù)的地址(指針)
iii. 函數(shù)指針變量的定義: 類型名 (*變量名) (形參列表);如 int (*p)();
iv. 賦值:指針變量=函數(shù)名;設(shè)有個函數(shù)其函數(shù)名為max,則要將該函數(shù)的地址給p的話只要執(zhí)行如下語句即可 p = max;
指針數(shù)組:指針數(shù)組的數(shù)組元素都是指針變量,是用來存放變量的地址的,定義格式為 類型名 * 變量名[數(shù)組長度]; 如int * p[10];
指向指針的指針:指針變量也是一種變量,故在內(nèi)存中也有對應(yīng)的一個地址,而要存放指針變量的地址,就要求助于用來存放指針變量的地址的指針變量,定義格式 類型名 ** 變量名;如 int *p1; int **p2; int a=3;可進行賦值p1=&a; p2=&p1; 則a 、*p1和 **p2的值都是3.
十四、 宏定義
無參宏定義 #define 標識符 值 定義后,出現(xiàn)所定義的標識符的地方都將以定義時指定的值來代替。
#define M 2+3
main()
{ int x;
x=M*M; 則x的值為2+3*2+3=11若想得到的結(jié)果是(2+3)*(2+3)則定義時也寫成這樣 #define M (2+3)
}
注意#define、標識符、值之間都要用空格隔開,且宏定義結(jié)尾不需加分號。
帶參宏定義 #define 標識符(參數(shù)表) 值
#define S(x,y) x*y
main( )
{ int a=3,b=4,c=5,d=6;
printf("a*b=%d\n", S(a,b)); 此時會打印出 a*b=12
printf("a+b*c+d=%d\n" , S(a+b,c+d)); 此時會打印出a+b*c+d=29,帶參宏定義執(zhí)行時是將a+b這樣一個表達式代替x,c+d這樣一個表達式代替y,所以S(a+b,c+d)進行的是a+b*c+d的運算,而不是將a+b的值給x,c+d的值給y然后再做x*y,這點跟函數(shù)調(diào)用傳遞參數(shù)是不一樣的。
}
自定義類型名typedef:對已存在的類型名取一個外號。
i. 基本格式:typedef 原類型名 新類型名;
ii. typedef int INTEGER; 則int a,b;等價于INTEGER a,b;
iii. typedef int NUM[10]; 則 int a[10];等價于 NUM a; a即為一個有10個元素的數(shù)組的數(shù)組名。
iv. typedef int * INTEGER; 則int *a,*b;等價于INTEGER a,b;
十五、 結(jié)構(gòu)體,共用體,枚舉類型
結(jié)構(gòu)體
i. 結(jié)構(gòu)體類型的定義及變量的定義
struct 結(jié)構(gòu)體名
{類型 成員1;
類型 成員2;
……
類型 成員n;
}變量名;
如
struct student
{ char name[10];
long num;
int score[4];
}st1;定義類型時同時定義變量
struct student st2;定義類型后,用類型名定義變量
還有一種
struct
{ char name[10];
long num;
int score[4];
}st3;不給類型名,直接定義變量
ii. 結(jié)構(gòu)體變量所占字節(jié)數(shù):各成員各占字節(jié)數(shù)之和,如以上st1,st2,st3的字節(jié)數(shù)皆為10+4+2*4=22
iii. 結(jié)構(gòu)體數(shù)組的定義及初始化
struct student a[3]={{ "zhang",20030001,89,90,91,92},
{"liu",20030002,68,69,70,71},
{"li",20030003,57,58,59,60}
}
iv. 結(jié)構(gòu)體成員的訪問
1. 結(jié)構(gòu)體變量名. 成員名 如st1.name[2]
2. 通過指針訪問:struct student *st; st=&st1; (*st).num 或 st->num
共用體
v. 共用體類型的定義及變量的定義
union 共用體名
{ 類型 成員名1;
…
類型 成員名n;
};
變量的定義與結(jié)構(gòu)體類似,也有三種方法。
union data
{
int i;
char ch;
float f;
}d1; 定義類型時同時定義變量
union data d2; 定義類型后,用類型名定義變量
union
{
int i;
char ch;
float f;
}d3; 不給類型名,直接定義變量
vi. 共用體變量所占字節(jié)數(shù):各成員所占字節(jié)數(shù)的最大值,如上d1,d2,d3所占字節(jié)數(shù)皆為4.(單精度浮點型變量所占字節(jié)數(shù)最多為4).
vii. 共用體成員的訪問
1. 共用體變量名. 成員名 如d1.f
2. 通過指針訪問:union student *d; d=&d1; (*d).num 或 d->num
枚舉類型
viii. 枚舉類型的定義: enum 枚舉名{枚舉元素名1,枚舉元素名2,…,枚舉元素名n};
ix. 枚舉元素的值:
默認值分別為0、1、…、n-1。枚舉元素的值也可在定義時重指定,對于沒有指定值的元素,按順序加1
如enum weekday{sun=7,mon=1,tue,wend,thur,fri,sat};則sun值為7,mon值為1,tue值為2,wend值為3,thur值為4,fri值為5,sat值為6
|