亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 11.txt

?? 多數情況下
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
    本例程序定義了一個結構stu,定義了stu類型結構變量boy1并作了初始化賦值,還定義了一個指向stu類型結構的指針變量pstu。在main函數中,pstu被賦予boy1的地址,因此pstu指向boy1。然后在printf語句內用三種形式輸出boy1的各個成員值。從運行結果可以看出:
結構變量.成員名
(*結構指針變量).成員名
結構指針變量->成員名
這三種用于表示結構成員的形式是完全等效的。
11.7.2	指向結構數組的指針
指針變量可以指向一個結構數組,這時結構指針變量的值是整個結構數組的首地址。結構指針變量也可指向結構數組的一個元素,這時結構指針變量的值是該結構數組元素的首地址。
設ps為指向結構數組的指針變量,則ps也指向該結構數組的0號元素,ps+1指向1號元素,ps+i則指向i號元素。這與普通數組的情況是一致的。
【例11.6】用指針變量輸出結構數組。
struct stu
{
    int num;
    char *name;
    char sex;
    float score;
}boy[5]={
          {101,"Zhou ping",'M',45},
          {102,"Zhang ping",'M',62.5},
          {103,"Liou fang",'F',92.5},
          {104,"Cheng ling",'F',87},
          {105,"Wang ming",'M',58},
        };
main()
{
 struct stu *ps;
 printf("No\tName\t\t\tSex\tScore\t\n");
 for(ps=boy;ps<boy+5;ps++)
 printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);
}
 
在程序中,定義了stu結構類型的外部數組boy并作了初始化賦值。在main函數內定義ps為指向stu類型的指針。在循環語句for的表達式1中,ps被賦予boy的首地址,然后循環5次,輸出boy數組中各成員值。
應該注意的是,一個結構指針變量雖然可以用來訪問結構變量或結構數組元素的成員,但是,不能使它指向一個成員。也就是說不允許取一個成員的地址來賦予它。因此,下面的賦值是錯誤的。
ps=&boy[1].sex;
而只能是:
    ps=boy;(賦予數組首地址)
或者是:
ps=&boy[0];(賦予0號元素首地址)
11.7.3	結構指針變量作函數參數
在ANSI C標準中允許用結構變量作函數參數進行整體傳送。但是這種傳送要將全部成員逐個傳送,特別是成員為數組時將會使傳送的時間和空間開銷很大,嚴重地降低了程序的效率。因此最好的辦法就是使用指針,即用指針變量作函數參數進行傳送。這時由實參傳向形參的只是地址,從而減少了時間和空間的開銷。
【例11.7】計算一組學生的平均成績和不及格人數。用結構指針變量作函數參數編程。
struct stu
{
    int num;
    char *name;
    char sex;
    float score;}boy[5]={
        {101,"Li ping",'M',45},
        {102,"Zhang ping",'M',62.5},
        {103,"He fang",'F',92.5},
        {104,"Cheng ling",'F',87},
        {105,"Wang ming",'M',58},
      };
main()
{
    struct stu *ps;
    void ave(struct stu *ps);
    ps=boy;
    ave(ps);
}
void ave(struct stu *ps)
{
    int c=0,i;
    float ave,s=0;
    for(i=0;i<5;i++,ps++)
      {
        s+=ps->score;
        if(ps->score<60) c+=1;
      }
    printf("s=%f\n",s);
    ave=s/5;
    printf("average=%f\ncount=%d\n",ave,c);
}
 
本程序中定義了函數ave,其形參為結構指針變量ps。boy被定義為外部結構數組,因此在整個源程序中有效。在main函數中定義說明了結構指針變量ps,并把boy的首地址賦予它,使ps指向boy數組。然后以ps作實參調用函數ave。在函數ave中完成計算平均成績和統計不及格人數的工作并輸出結果。
由于本程序全部采用指針變量作運算和處理,故速度更快,程序效率更高。
11.8	動態存儲分配
在數組一章中,曾介紹過數組的長度是預先定義好的,在整個程序中固定不變。C語言中不允許動態數組類型。
例如:
int n;
    scanf("%d",&n);
int a[n];
用變量表示長度,想對數組的大小作動態說明,這是錯誤的。但是在實際的編程中,往往會發生這種情況,即所需的內存空間取決于實際輸入的數據,而無法預先確定。對于這種問題,用數組的辦法很難解決。為了解決上述問題,C語言提供了一些內存管理函數,這些內存管理函數可以按需要動態地分配內存空間,也可把不再使用的空間回收待用,為有效地利用內存資源提供了手段。
常用的內存管理函數有以下三個:
1.	分配內存空間函數malloc
調用形式:
  (類型說明符*)malloc(size)
功能:在內存的動態存儲區中分配一塊長度為"size"字節的連續區域。函數的返回值為該區域的首地址。
“類型說明符”表示把該區域用于何種數據類型。
(類型說明符*)表示把返回值強制轉換為該類型指針。
“size”是一個無符號數。
例如:
          pc=(char *)malloc(100);
表示分配100個字節的內存空間,并強制轉換為字符數組類型,函數的返回值為指向該字符數組的指針,把該指針賦予指針變量pc。
2.	分配內存空間函數 calloc
 calloc 也用于分配內存空間。
調用形式:
  (類型說明符*)calloc(n,size)
功能:在內存動態存儲區中分配n塊長度為“size”字節的連續區域。函數的返回值為該區域的首地址。
(類型說明符*)用于強制類型轉換。
calloc函數與malloc 函數的區別僅在于一次可以分配n塊區域。
例如:
     ps=(struet stu*)calloc(2,sizeof(struct stu));
其中的sizeof(struct stu)是求stu的結構長度。因此該語句的意思是:按stu的長度分配2塊連續區域,強制轉換為stu類型,并把其首地址賦予指針變量ps。
2.	釋放內存空間函數free
調用形式:
  free(void*ptr);
功能:釋放ptr所指向的一塊內存空間,ptr是一個任意類型的指針變量,它指向被釋放區域的首地址。被釋放區應是由malloc或calloc函數所分配的區域。
【例11.8】分配一塊區域,輸入一個學生數據。
main()
{
    struct stu
    {
      int num;
      char *name;
      char sex;
      float score;
    }  *ps;
    ps=(struct stu*)malloc(sizeof(struct stu));
    ps->num=102;
    ps->name="Zhang ping";
    ps->sex='M';
    ps->score=62.5;
    printf("Number=%d\nName=%s\n",ps->num,ps->name);
    printf("Sex=%c\nScore=%f\n",ps->sex,ps->score);
    free(ps);
}
 
本例中,定義了結構stu,定義了stu類型指針變量ps。然后分配一塊stu大內存區,并把首地址賦予ps,使ps指向該區域。再以ps為指向結構的指針變量對各成員賦值,并用printf輸出各成員值。最后用free函數釋放ps指向的內存空間。整個程序包含了申請內存空間、使用內存空間、釋放內存空間三個步驟,實現存儲空間的動態分配。
11.9	鏈表的概念
在例7.8中采用了動態分配的辦法為一個結構分配內存空間。每一次分配一塊空間可用來存放一個學生的數據,我們可稱之為一個結點。有多少個學生就應該申請分配多少塊內存空間,也就是說要建立多少個結點。當然用結構數組也可以完成上述工作,但如果預先不能準確把握學生人數,也就無法確定數組大小。而且當學生留級、退學之后也不能把該元素占用的空間從數組中釋放出來。
用動態存儲的方法可以很好地解決這些問題。有一個學生就分配一個結點,無須預先確定學生的準確人數,某學生退學,可刪去該結點,并釋放該結點占用的存儲空間。從而節約了寶貴的內存資源。另一方面,用數組的方法必須占用一塊連續的內存區域。而使用動態分配時,每個結點之間可以是不連續的(結點內是連續的)。結點之間的聯系可以用指針實現。 即在結點結構中定義一個成員項用來存放下一結點的首地址,這個用于存放地址的成員,常把它稱為指針域。
可在第一個結點的指針域內存入第二個結點的首地址,在第二個結點的指針域內又存放第三個結點的首地址,如此串連下去直到最后一個結點。最后一個結點因無后續結點連接,其指針域可賦為0。這樣一種連接方式,在數據結構中稱為“鏈表”。
下圖為最一簡單鏈表的示意圖。
 
圖中,第0個結點稱為頭結點,它存放有第一個結點的首地址,它沒有數據,只是一個指針變量。以下的每個結點都分為兩個域,一個是數據域,存放各種實際的數據,如學號num,姓名name,性別sex和成績score等。另一個域為指針域,存放下一結點的首地址。鏈表中的每一個結點都是同一種結構類型。
例如,一個存放學生學號和成績的結點應為以下結構:
    struct stu
    { int num;
      int score;
      struct stu *next;
}
前兩個成員項組成數據域,后一個成員項next構成指針域,它是一個指向stu類型結構的指針變量。
鏈表的基本操作對鏈表的主要操作有以下幾種:
1.	建立鏈表;
2.	結構的查找與輸出;
3.	插入一個結點;
4.	刪除一個結點;
下面通過例題來說明這些操作。
【例11.9】建立一個三個結點的鏈表,存放學生數據。為簡單起見, 我們假定學生數據結構中只有學號和年齡兩項。可編寫一個建立鏈表的函數creat。程序如下:
    #define NULL 0
    #define TYPE struct stu
    #define LEN sizeof (struct stu)
    struct stu
        {
          int num;
          int age;
          struct stu *next;
        };
    TYPE *creat(int n)
    {
        struct stu *head,*pf,*pb;
        int i;
        for(i=0;i<n;i++)
        {    
          pb=(TYPE*) malloc(LEN);
          printf("input Number and  Age\n");
          scanf("%d%d",&pb->num,&pb->age);
          if(i==0)
          pf=head=pb;
          else pf->next=pb;
          pb->next=NULL;
          pf=pb;
        }
        return(head);
    }
在函數外首先用宏定義對三個符號常量作了定義。這里用 TYPE表示struct stu,用LEN表示sizeof(struct stu)主要的目的是為了在以下程序內減少書寫并使閱讀更加方便。結構stu定義為外部類型,程序中的各個函數均可使用該定義。
creat函數用于建立一個有n個結點的鏈表,它是一個指針函數,它返回的指針指向stu結構。在creat函數內定義了三個stu結構的指針變量。head為頭指針,pf為指向兩相鄰結點的前一結點的指針變量。pb為后一結點的指針變量。
11.10	枚舉類型
在實際問題中,有些變量的取值被限定在一個有限的范圍內。例如,一個星期內只有七天,一年只有十二個月,一個班每周有六門課程等等。如果把這些量說明為整型,字符型或其它類型顯然是不妥當的。為此,C語言提供了一種稱為“枚舉”的類型。在“枚舉”類型的定義中列舉出所有可能的取值,被說明為該“枚舉”類型的變量取值不能超過定義的范圍。應該說明的是,枚舉類型是一種基本數據類型,而不是一種構造類型,因為它不能再分解為任何基本類型。
11.10.1	枚舉類型的定義和枚舉變量的說明
1.	枚舉的定義枚舉類型定義的一般形式為:
    enum 枚舉名{ 枚舉值表 };
在枚舉值表中應羅列出所有可用值。這些值也稱為枚舉元素。
例如:
    
該枚舉名為weekday,枚舉值共有7個,即一周中的七天。凡被說明為weekday類型變量的取值只能是七天中的某一天。
2.	枚舉變量的說明
如同結構和聯合一樣,枚舉變量也可用不同的方式說明,即先定義后說明,同時定義說明或直接說明。
設有變量a,b,c被說明為上述的weekday,可采用下述任一種方式:
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
或者為:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者為:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
11.10.2	枚舉類型變量的賦值和使用
枚舉類型在使用中有以下規定:
1.	枚舉值是常量,不是變量。不能在程序中用賦值語句再對它賦值。
  例如對枚舉weekday的元素再作以下賦值:
    sun=5;
mon=2;
sun=mon;
都是錯誤的。
2.	枚舉元素本身由系統定義了一個表示序號的數值,從0開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,…,sat值為6。
【例11.10】
main(){
    enum weekday
    { sun,mon,tue,wed,thu,fri,sat } a,b,c;
    a=sun;
    b=mon;
    c=tue;
    printf("%d,%d,%d",a,b,c);
}
 
說明:
只能把枚舉值賦予枚舉變量,不能把元素的數值直接賦予枚舉變量。如:
    a=sum;
b=mon;
是正確的。而:
    a=0;
b=1;
是錯誤的。如一定要把數值賦予枚舉變量,則必須用強制類型轉換。
如:
    a=(enum weekday)2;
其意義是將順序號為2的枚舉元素賦予枚舉變量a,相當于:
    a=tue;
還應該說明的是枚舉元素不是字符常量也不是字符串常量,使用時不要加單、雙引號。
【例11.11】
main(){
    enum body
    { a,b,c,d } month[31],j;
    int i;
    j=a;
    for(i=1;i<=30;i++){
      month[i]=j;
      j++;
      if (j>d) j=a;
    }
    for(i=1;i<=30;i++){
      switch(month[i])
      {
        case a:printf(" %2d  %c\t",i,'a'); break;
        case b:printf(" %2d  %c\t",i,'b'); break;
        case c:printf(" %2d  %c\t",i,'c'); break;
        case d:printf(" %2d  %c\t",i,'d'); break;
        default:break;
      }
    }
    printf("\n");
}
 
11.11	類型定義符typedef
C語言不僅提供了豐富的數據類型,而且還允許由用戶自己定義類型說明符,也就是說允許由用戶為數據類型取“別名”。類型定義符typedef即可用來完成此功能。例如,有整型量a,b,其說明如下:
    int a,b;
其中int是整型變量的類型說明符。int的完整寫法為integer,為了增加程序的可讀性,可把整型說明符用typedef定義為:
typedef int INTEGER
這以后就可用INTEGER來代替int作整型變量的類型說明了。 
例如:
    INTEGER a,b;
它等效于:
    int a,b;
用typedef定義數組、指針、結構等類型將帶來很大的方便,不僅使程序書寫簡單而且使意義更為明確,因而增強了可讀性。
例如:
    typedef char NAME[20];    表示NAME是字符數組類型,數組長度為20。然后可用NAME 說明變量,如:
    NAME a1,a2,s1,s2;
完全等效于:
    char a1[20],a2[20],s1[20],s2[20]
又如:
    typedef struct stu
    { char name[20];
      int age;
      char sex;
           } STU;
定義STU表示stu的結構類型,然后可用STU來說明結構變量:
STU body1,body2;
typedef定義的一般形式為:
typedef 原類型名  新類型名 
其中原類型名中含有定義部分,新類型名一般用大寫表示,以便于區別。
有時也可用宏定義來代替typedef的功能,但是宏定義是由預處理完成的,而typedef則是在編譯時完成的,后者更為靈活方便。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品奇米国产一区二区三区| 欧美一卡二卡在线观看| 国产精品自拍一区| 欧美性受xxxx| 国产欧美日韩精品在线| 日本午夜精品一区二区三区电影| 中文字幕一区二区三区蜜月| 日本一区二区免费在线| 久久成人免费电影| 久久综合色之久久综合| 麻豆国产91在线播放| 中文字幕一区不卡| 国模娜娜一区二区三区| 裸体歌舞表演一区二区| 精品视频一区 二区 三区| 亚洲精品久久久蜜桃| 欧美激情一区二区三区四区| 国产精选一区二区三区| 精品裸体舞一区二区三区| 欧美电影在线免费观看| 成人avav在线| 亚洲成年人影院| 另类小说一区二区三区| av中文字幕不卡| 欧美日韩亚洲高清一区二区| 日韩免费视频一区二区| 中文字幕一区二区三区在线观看| 亚洲欧美视频在线观看视频| 亚洲成a人片综合在线| 国产伦精品一区二区三区在线观看| av一区二区三区| 在线播放日韩导航| 国产日本一区二区| 石原莉奈在线亚洲二区| 成人夜色视频网站在线观看| 欧美人狂配大交3d怪物一区| 国产亚洲欧美日韩俺去了| 亚洲一级二级在线| 床上的激情91.| 欧美老肥妇做.爰bbww视频| 久久久影视传媒| 亚洲一区二区精品视频| 岛国精品一区二区| 日韩午夜av一区| 国产精品白丝在线| 国产综合久久久久影院| 欧美三级中文字幕在线观看| 国产清纯白嫩初高生在线观看91| 香蕉乱码成人久久天堂爱免费| 不卡影院免费观看| 久久久蜜桃精品| 久久国产三级精品| 欧美日本一区二区三区| 亚洲人精品午夜| 国产成人免费av在线| 欧美成人一区二区三区片免费| 亚洲国产精品久久人人爱蜜臀| av影院午夜一区| 国产精品嫩草影院av蜜臀| 国产一区二区三区在线观看精品 | 蜜桃av噜噜一区| 欧美午夜免费电影| 一区二区三区在线视频免费观看| 成人高清视频免费观看| 久久久久久免费毛片精品| 裸体一区二区三区| 精品精品欲导航| 国产精品一区二区在线播放| 日韩写真欧美这视频| 琪琪一区二区三区| 精品欧美黑人一区二区三区| 美女爽到高潮91| 精品久久久三级丝袜| 精品综合免费视频观看| 久久人人爽爽爽人久久久| 国产一区久久久| 国产精品激情偷乱一区二区∴| 丰满放荡岳乱妇91ww| 国产精品美女视频| 91片黄在线观看| 亚洲一区二区三区美女| 欧美日韩国产免费| 久久精品理论片| 欧美国产日韩亚洲一区| caoporen国产精品视频| 一区二区三区四区乱视频| 欧美日韩精品一区二区在线播放| 日韩影院免费视频| 久久九九久久九九| 91视频精品在这里| 午夜亚洲福利老司机| 欧美va亚洲va在线观看蝴蝶网| 国产成人av一区| 一区二区三区四区乱视频| 日韩三级免费观看| 99精品国产热久久91蜜凸| 偷拍自拍另类欧美| 欧美国产激情二区三区| 欧美中文字幕一二三区视频| 日本亚洲电影天堂| 最新不卡av在线| 欧美一区二视频| 成人免费的视频| 免费观看在线色综合| 国产精品少妇自拍| 欧美一区二区网站| 丁香激情综合五月| 日本特黄久久久高潮| 亚洲欧洲日韩在线| 日韩欧美高清在线| 欧美亚一区二区| 北条麻妃国产九九精品视频| 亚洲第一二三四区| 综合久久久久久| 精品国产一区二区三区av性色| 一本一道久久a久久精品| 久久99精品久久久久久国产越南| 亚洲蜜臀av乱码久久精品| 日韩欧美久久一区| 欧美视频日韩视频| 9色porny自拍视频一区二区| 美国毛片一区二区| 一区二区免费看| 中文字幕一区日韩精品欧美| 日韩欧美成人激情| 777色狠狠一区二区三区| 91丝袜美腿高跟国产极品老师| 国产中文字幕一区| 免费成人av资源网| 亚洲国产精品视频| 一个色综合网站| 中文字幕在线播放不卡一区| 国产日韩欧美激情| 精品成a人在线观看| 日韩亚洲欧美高清| 欧美精选一区二区| 在线视频中文字幕一区二区| 成人av综合一区| 国产在线不卡视频| 国产美女视频一区| 狠狠狠色丁香婷婷综合激情| 视频在线观看91| 日韩av成人高清| 免费看欧美女人艹b| 日韩黄色小视频| 日韩国产在线一| 日韩成人午夜精品| 美日韩一级片在线观看| 美女脱光内衣内裤视频久久影院| 日韩va亚洲va欧美va久久| 三级久久三级久久久| 日韩成人免费电影| 老司机精品视频线观看86| 久久精品国产99国产| 精品亚洲国内自在自线福利| 国产一区二区0| jvid福利写真一区二区三区| 99精品国产热久久91蜜凸| 色综合久久久久综合体| 色综合网站在线| 欧美另类久久久品| 欧美刺激午夜性久久久久久久| www国产成人免费观看视频 深夜成人网| 精品国产a毛片| 国产精品久久久久影院| 亚洲青青青在线视频| 日韩二区三区四区| 国产乱码精品一区二区三| 99视频精品在线| 欧美特级限制片免费在线观看| 欧美夫妻性生活| 欧美经典一区二区| 亚洲午夜精品17c| 久久se这里有精品| 成人精品国产免费网站| 欧美亚洲动漫精品| 26uuu亚洲综合色欧美| 综合激情成人伊人| 亚洲va在线va天堂| 国产91综合一区在线观看| 色狠狠色狠狠综合| 精品奇米国产一区二区三区| 国产精品初高中害羞小美女文| 亚洲国产中文字幕在线视频综合| 美女mm1313爽爽久久久蜜臀| 99麻豆久久久国产精品免费 | 99国产麻豆精品| 91精品国产综合久久小美女| 中文字幕欧美国产| 亚洲国产精品欧美一二99| 国产成人精品免费| 777a∨成人精品桃花网| 国产精品成人在线观看| 蜜桃视频免费观看一区| 在线观看国产日韩| 久久久精品免费免费| 天天免费综合色| 色综合激情五月| 国产亚洲制服色| 免费观看一级欧美片|