午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

【C語言】C語言基礎(chǔ)知識概念

 jamfoot 2017-05-19

目錄:


一、 常量

二、 標識符

三、 變量

四、 表達式

五、 輸入輸出函數(shù)

六、 C語言的語句

七、 C程序的基本結(jié)構(gòu)

八、 選擇結(jié)構(gòu)語句

if(表達式語句else 語句2

條件運算符 表達式1? 表達式表達式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,352.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 20則定義了符號常量N,其值為20,注意符號常量名和符號常量值之間是用空格隔開,而不是寫上=號,#define和符號常量名之間也有空格的。

 題目P71,5,6,79,10




二、 標識符


 命名規(guī)則

以數(shù)字,字母,下劃線這三類字符組成,但只能以字母或下劃線開頭,而不能也數(shù)字開頭,另外不能將關(guān)鍵字做為標識符。32個關(guān)鍵字表在P365附錄B

 變量名,函數(shù)名,符號常量名全都是標識符

 題目:P72,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-9x+=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

 題目:P711~17  P818~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):5;

3. 若是這種格式scanf(%d%c%d,&a,&ch,&b);則輸入時應(yīng)3+5,若寫成5a=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]=helloprintf(%s,str);

viii. %u輸入輸出無符號整型,%o:輸入輸出八進制數(shù),             

%x:輸入輸出十六進制數(shù)

 getchar();

函數(shù)調(diào)用后返回用戶輸入的一個字符,故需再定義一個變量來存放這個字符,即使用時應(yīng) char c; c=getchar();意思就是接收用戶輸入的一個字符,并將其賦值給變量c。

 putchar(字符常量或字符變量名);

char c=Aputchar(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(表達式語句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(表達式語句else 語句2

3. 多層(重點掌握)

if(表達式1) 語句

else if(表達式2) 語句

else if(表達式3) 語句3

else 語句n

 條件運算符 表達式1? 表達式表達式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]=5a[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]的值分別為01,2,3,4

 遍歷數(shù)組元素

數(shù)組定義后,我們不能對數(shù)組進行整體的操作,如int a[10];不能用a=3這樣的操作將數(shù)組的各元素都賦值為3;而只能一個一個元素的進行賦值,如a[0]=3;a[1]=3;a[2]=3a[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  int  )

 int  ;

    z=  ;

    return  ;

}

注意點:

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);會打印出3x的值

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í)行如下語句即可 max;

 指針數(shù)組:指針數(shù)組的數(shù)組元素都是指針變量,是用來存放變量的地址的,定義格式為 類型名 變量名[數(shù)組長度]; int p[10];

 指向指針的指針:指針變量也是一種變量,故在內(nèi)存中也有對應(yīng)的一個地址,而要存放指針變量的地址,就要求助于用來存放指針變量的地址的指針變量,定義格式  類型名 ** 變量名;如 int *p1; int **p2; int a=3;可進行賦值p1=&a; p2=&p1; *p1和 **p2的值都是3.


十四、 宏定義


 無參宏定義 #define  標識符     定義后,出現(xiàn)所定義的標識符的地方都將以定義時指定的值來代替。

#define   2+3

main()

 int x;

   x=M*M;  x的值為2+3*2+3=11若想得到的結(jié)果是(2+3)*(2+3)則定義時也寫成這樣 #define (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這樣一個表達式代替xc+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 INTEGERint a,b;等價于INTEGER a,b;

iii. typedef  int  NUM[10]; 則 int a[10];等價于 NUM a; a即為一個有10個元素的數(shù)組的數(shù)組名。

iv. typedef int INTEGERint *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值為4fri值為5,sat值為6




    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多