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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 第8章 函 數(shù).txt

?? 我自己整理的c語言教程 來自 c語言之家
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
      ......
     return ret_code; 
 }

    在上例中,函數(shù)open_customer_table()是一個外部函數(shù),它可以被任何模塊調(diào)用,而函數(shù)open_customer_indexes()是一個內(nèi)部函數(shù),它永遠不會被其它模塊調(diào)用。之所以這樣說明這兩個函數(shù),是因為函數(shù)open_customer_indexes()只需被函數(shù)open_customer_table()調(diào)用,即只需在上例所示的源文件中使用。

    請參見:
    8.1 什么時候說明函數(shù)?
    8.2 為什么要說明函數(shù)原型?
    8.3 一個函數(shù)可以有多少個參數(shù)?

    8.5  如果一個函數(shù)沒有返回值,是否需要加入return語句?
    在C語言中,用void關(guān)鍵字說明的函數(shù)是沒有返回值的,并且也沒有必要加入return語句。
    在有些情況下,一個函數(shù)可能會引起嚴重的錯誤,并且要求立即退出該函數(shù),這時就應(yīng)該加入一個return語句,以跳過函數(shù)體內(nèi)還未執(zhí)行的代碼。然而,在函數(shù)中隨意使用return語句是一種不可取的編程習(xí)慣,因此,退出函數(shù)的操作通常應(yīng)該盡量集中和簡潔。

    請參見:
    8.8 用PASCAL修飾符說明的函數(shù)與普通C函數(shù)有什么不同?
    8.9 exit()和return有什么不同?

    8.6  怎樣把數(shù)組作為參數(shù)傳遞給函數(shù)?
    在把數(shù)組作為參數(shù)傳遞給函數(shù)時,有值傳遞(by value)和地址傳遞(by reference)兩種方式。在值傳遞方式中,在說明和定義函數(shù)時,要在數(shù)組參數(shù)的尾部加上一對方括號([]),調(diào)用函數(shù)時只需將數(shù)組的地址(即數(shù)組名)傳遞給函數(shù)。例如,在下例中數(shù)組x[]是通過值傳遞方式傳遞給byval_func()函數(shù)的:

# include <atdio.h>

voidbyval_func(int[]);       /*the  byval_func()  function is passed an 
                                integer array by value * / 
void main (void);

void main (void)
{
    int x[10]; 
    int y;
     /* Set up the integer array. * / 
     for (y=0; y<10;   y++)
        x[y] = y;
     /* Call byval_func() ,passing the x array by value. * / 
     byval_func(x); 
} 
/* The byval_function receives an integer array by value. * /
void byval_func(int i[])
{
     int y; 
     /* print the content: of the integer array. * /
     for (y=0; y<10;  y++) 
         printf("%d\n", i[y]);
}

    在上例中,定義了一個名為x的數(shù)組,并對它的10個元素賦了初值。函數(shù)byval_func()的說明如下所示:
    intbyval_func(int []);
    參數(shù)int[]告訴編譯程序byval_func()函數(shù)只有一個參數(shù),即一個由int類型值組成的數(shù)組。在調(diào)用byval_func()函數(shù)時,只需將數(shù)組的地址傳遞給該函數(shù),即:
    byval_func(x);
    在值傳遞方式中,數(shù)組x將被復(fù)制一份,復(fù)制所得的數(shù)組將被存放在棧中,然后由byval_func()函數(shù)接收并打印出來。由于傳遞給byal_func()函數(shù)的是初始數(shù)組的一份拷貝,因此在byval_func()函數(shù)內(nèi)部修改傳遞過來的數(shù)組對初始數(shù)組沒有任何影響。
    值傳遞方式的開銷是非常大的,其原因有這樣幾點:第一,需要完整地復(fù)制初始數(shù)組并將這份拷貝存放到棧中,這將耗費相當(dāng)可觀的運行時間,因而值傳遞方式的效率比較低;第二,初始數(shù)組的拷貝需要占用額外的內(nèi)存空間(棧中的內(nèi)存);第三,編譯程序需要專門產(chǎn)生一部分用來復(fù)制初始數(shù)組的代碼,這將使程序變大。
    地址傳遞方式克服了值傳遞方式的缺點,是一種更好的方式。在地址傳遞方式中,傳遞給函數(shù)的是指向初始數(shù)組的指針,不用復(fù)制初始數(shù)組,因此程序變得精練和高效,并且也節(jié)省了棧中的內(nèi)存空間。在地址傳遞方式中,只需在函數(shù)原型中將函數(shù)的參數(shù)說明為指向數(shù)組元素數(shù)據(jù)類型的一個指針。請看下例:

# include <atdio. h>

void conat_func(const int* ); 
void main (void);

void main(void)
{
    int x[10]; 
    int y;
     /* Set up the integer array. * / 
     for (y=0; y<10; y++)
        x[y] =  y;
     /* Call conat_func(), passing the x array by reference. */ 
     conat_func(x); 
}
/*The  const_function receives an integer array by reference. 
   Notice that the pointer i? declared aa const, which renders 
   it unmodif table by the conat_funcO function. * /
void conat_func(conat int* i) 
{ 
     int y; 
     / * print the contents of the integer array. * /
    for (y=0; y<10; y++) 
         printf(""%d\n", *(i+y));
}

在上例中,同樣定義了一個名為x的數(shù)組,并對它的10個元素賦了初始值。函數(shù)const_func()的說明如下所示:
    int const_func(const int·);
    參數(shù)constint·告訴編譯程序const_func()函數(shù)只有一個參數(shù),即指向一個int類型常量的指針。在調(diào)用const_func()函數(shù)時,同樣只需將數(shù)組的地址傳遞給該函數(shù),即:
    const_rune(x);
    在地址傳遞方式中,沒有復(fù)制初始數(shù)組并將其拷貝存放在棧中,const_rune()函數(shù)只接收到指向一個int類型常量的指針,因此在編寫程序時要保證傳遞給const_func()函數(shù)的是指向一個由int類型值組成的數(shù)組的指針。const修飾符的作用是防止const_func()函數(shù)意外地修改初始數(shù)組中的某一個元素。
    地址傳遞方式唯一的不足之處是必須由程序本身來保證將一個數(shù)組傳遞給函數(shù)作為參數(shù),例如,在函數(shù)const—rune()的原型和定義中,都沒有明確指示該函數(shù)的參數(shù)是指向一個由int類型值組成的數(shù)組的指針。然而,地址傳遞方式速度快,效率高,因此,在對運行速度要求比較高時,應(yīng)該采用這種方式。

    請參見:
    8.8用PASCAL修飾符說明的函數(shù)與普通C函數(shù)有什么不同?

    8.7  在程序退出main()函數(shù)之后,還有可能執(zhí)行一部分代碼嗎?
    可以,但這要借助C庫函數(shù)atexit()。利用atexit()函數(shù)可以在程序終止前完成一些“清理”工作——如果將指向一組函數(shù)的指針傳遞給atexit()函數(shù),那么在程序退出main()函數(shù)后(此時程序還未終止)就能自動調(diào)用這組函數(shù)。下例的程序中就使用了atexit()函數(shù):

# include <stdio.h> 
# include <atdlib. h>

void close_files(void); 
void print_regiatration_message(void); 
int main(int, char ** );

int main (int argc, char** argv)
 {
     atcxitCprint_regiatration_message); 
     atexit(cloae_files) ;
    while (rec_count <max_recorda)
       {
         process_one_record ( ); 
     } 
     exit (0);
 }

  在上例中,通過atexit()函數(shù)指示程序在退出main()函數(shù)后自動調(diào)用函數(shù)close_files()
和print_registration_message(),分別完成關(guān)閉文件和打印登記消息這兩項工作。
    在使用atexit()函數(shù)時你要注意這樣兩點:第一,由atexit()函數(shù)指定的要在程序終止前
執(zhí)行的函數(shù)要用關(guān)鍵字void說明,并且不能帶參數(shù);第二,由atexit()函數(shù)指定的函數(shù)在入棧
時的順序和調(diào)用atexit()函數(shù)的順序相同,即它們在執(zhí)行時遵循后進先出(LIFO)的原則。例
如,在上例中,由atexit()函數(shù)指定的函數(shù)在入棧時的順序如下所示:
    atexit(print_registration_message);    
    atexit(close_files);
    根據(jù)LIFO原則,程序在退出main()函數(shù)后將先調(diào)用close_files()函數(shù),然后調(diào)用print_
registration_message()函數(shù)。    
    利用atexit()函數(shù),你可以很方便地在退出main()函數(shù)后調(diào)用一些特定的函數(shù),以完成一
些善后工作(例如關(guān)閉程序中用到的數(shù)據(jù)文件)。

    請參見:
    8.9 exit()和return有什么不同?

     8.8 用PASCAL修飾符說明的函數(shù)與普通C函數(shù)有什么不同?
     用PASCAL修飾符說明的函數(shù)的調(diào)用約定與普通函數(shù)有所不同。對于普通的C函數(shù),參數(shù)是自右至左傳遞的,而根據(jù)PASCAL調(diào)用約定,參數(shù)是自左至右傳遞的。下例是一個普通的C函數(shù):
    int regular_func(int,char*,long);
    根據(jù)普通C函數(shù)的調(diào)用約定,函數(shù)參數(shù)入棧時的順序為自右至左,因此,在調(diào)用regular()函數(shù)時,其參數(shù)的入棧順序如下所示:    
    long
    char·
    int
    當(dāng)regular_func()函數(shù)返回時,調(diào)用regular_func()函數(shù)的函數(shù)負責(zé)恢復(fù)棧。
    下例是一個用PASCAL修飾符說明的函數(shù):
  int PASCAL pascal_func(int,char *,long);
  根據(jù)PASCAL調(diào)用約定,函數(shù)參數(shù)入棧時的順序為自左至右,因此,在調(diào)用‘pascal—func()函數(shù)時,其參數(shù)的入棧順序如下所示:
    int
    char *
    long
    當(dāng)pascal_func()函數(shù)返回時,調(diào)用pascal_func()函數(shù)的函數(shù)負責(zé)恢復(fù)棧指針。
    采用PASCAL調(diào)用約定的函數(shù)比普通C函數(shù)的效率要高一些——前者的函數(shù)調(diào)用要稍快一些。MicrosoftWindows就是一個采用PASCAL調(diào)用約定的操作環(huán)境的例子,WindowsSDK中有數(shù)百個用PASCAL修飾符說明的函數(shù)。
    當(dāng)Windows的第一個版本于80年代末期編寫成功時,使用PASCAL修飾符能明顯提高程序的執(zhí)行速度。現(xiàn)在,計算機的運行速度已經(jīng)相當(dāng)快,PASCAL修飾符對程序運行速度的作用已經(jīng)很小了。事實上,Microsoft在其WindowsNT操作系統(tǒng)中已經(jīng)放棄了PASCAL調(diào)用約定。
    在大多數(shù)情況下,采用PASCAL調(diào)用約定對程序的運行速度幾乎沒有明顯的作用,因此,采用普通C函數(shù)的調(diào)用約定完全能滿足編程要求。但是,當(dāng)幾個毫秒的運行時間對你的程序也很重要時,你就應(yīng)該用PASCAL修飾符來說明你的函數(shù)。

    請參見:
    8.6怎樣把數(shù)組作為參數(shù)傳遞給函數(shù)?

    8.9 exit()和return有什么不同?
    用exit()函數(shù)可以退出程序并將控制權(quán)返回給操作系統(tǒng),而用return語句可以從一個函數(shù)中返回并將控制權(quán)返回給調(diào)用該函數(shù)的函數(shù)。如果在main()函數(shù)中加入return語句,那么在執(zhí)行這條語句后將退出main()函數(shù)并將控制權(quán)返回給操作系統(tǒng),這樣的一條return語句和exit()函數(shù)的作用是相同的。下例是一個使用了exit()函數(shù)和return語句的程序:

#include <stdio.h> 
#include <stdlib.h>

int main (int, char** ); 
int do_processing (void); 
int do_something_daring();

int main (int argc, char** argv)
{
    int ret_code;
    if (argc <3) 
    { 
         printf ("Wrong number of arguments used ! \n"); 
         /* return 1 to the operating system * / 
         exit(1); 
    } 
    ret_code = do_processing ();
    ......
     /* return 0 to the operating system * / 
     exit(0); 
 } 
int do_processing(void)
{
    int rc; 
    rc = do_aomcthing_daring();
   if (rc == ERROR)
   {
         printf ("Something fiahy ia going on around here... *\n); 
         /* return rc to the operating syatem * / 
         exit (re); 
   } 
     /* return 0 to the calling function * / 
     return 0; 
}

    在上例的main()函數(shù)中,如果argc小于3,程序就會退出。語句“exit(1)”指示程序在退出時將數(shù)字1返回給操作系統(tǒng)。操作系統(tǒng)有時會根據(jù)程序的返回值進行一些相關(guān)的操作,例如許多DOS批處理文件會通過一個名為ERRORLEVEL的全局變量來檢查可執(zhí)行程序的返回值。
    請參見:
    8.5如果一個函數(shù)沒有返回值,是否需要加入return語句?

 
 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
hitomi一区二区三区精品| 欧美mv日韩mv| 日韩欧美国产一区在线观看| 欧美—级在线免费片| 亚洲一二三专区| 国产高清精品网站| 91精品国产综合久久国产大片| 国产精品久久福利| 国产在线播放一区三区四| 欧美熟乱第一页| 亚洲日本成人在线观看| 国产精品99久久久久久久女警| 7777精品久久久大香线蕉| 综合婷婷亚洲小说| 国产盗摄女厕一区二区三区| 日韩一区二区三区高清免费看看| 亚洲精选视频免费看| 成人免费毛片片v| 国产午夜一区二区三区| 美女网站一区二区| 欧美精品久久99久久在免费线 | 91精品婷婷国产综合久久性色| 国产精品你懂的在线| 国产一区二区在线观看视频| 欧美一级在线视频| 日精品一区二区| 欧美三级三级三级爽爽爽| 亚洲日本乱码在线观看| 不卡一卡二卡三乱码免费网站| 久久久久久久综合狠狠综合| 黄页网站大全一区二区| 精品国产凹凸成av人导航| 久久精品国产澳门| 精品国产精品一区二区夜夜嗨| 日韩福利视频网| 日韩欧美另类在线| 久久国产精品免费| 久久蜜桃香蕉精品一区二区三区| 久久99精品久久只有精品| 精品国产一区二区三区忘忧草| 久久精品国产一区二区三| 日韩精品在线网站| 国产一区二区三区精品视频| 日韩视频免费观看高清在线视频| 日韩国产成人精品| 欧美精品一区二区久久婷婷| 国产mv日韩mv欧美| ...av二区三区久久精品| 91免费国产视频网站| 亚洲国产日韩精品| 欧美一区二区视频网站| 美女任你摸久久| 久久蜜臀中文字幕| 97超碰欧美中文字幕| 亚洲精品乱码久久久久| 欧美三区在线观看| 激情亚洲综合在线| 亚洲视频小说图片| 欧美久久久久久久久久| 国产一区二区剧情av在线| 日本欧美肥老太交大片| 国产色产综合产在线视频| 91在线免费视频观看| 天堂精品中文字幕在线| 久久久美女艺术照精彩视频福利播放 | 全部av―极品视觉盛宴亚洲| 欧美本精品男人aⅴ天堂| 成人激情图片网| 婷婷国产在线综合| 国产三级一区二区三区| 欧美日韩亚洲综合一区 | 亚洲午夜免费电影| 亚洲精品在线观看网站| 色婷婷综合久久久久中文| 精品一区二区成人精品| 亚洲激情在线激情| 国产亚洲短视频| 欧美色手机在线观看| 国产精品18久久久久久久久| 一片黄亚洲嫩模| 国产亚洲欧美激情| 欧美日韩国产首页| 99麻豆久久久国产精品免费 | 91精选在线观看| 93久久精品日日躁夜夜躁欧美| 青青草97国产精品免费观看 | 中文字幕亚洲欧美在线不卡| 日韩欧美亚洲国产精品字幕久久久| 成人涩涩免费视频| 久国产精品韩国三级视频| 亚洲曰韩产成在线| 国产精品电影一区二区三区| 欧美电视剧在线看免费| 欧美日本一区二区| 91视频免费播放| 成人一级片网址| 国产做a爰片久久毛片| 日韩黄色免费电影| 亚洲成人自拍一区| 亚洲综合网站在线观看| 日韩一区欧美小说| 国产精品污污网站在线观看| 精品久久人人做人人爰| 91麻豆精品国产91久久久更新时间| 一本一道波多野结衣一区二区| 大美女一区二区三区| 国产盗摄一区二区三区| 国产在线精品一区二区| 国产制服丝袜一区| 久久国产三级精品| 久久91精品国产91久久小草| 日韩电影一二三区| 性做久久久久久免费观看| 亚洲午夜电影网| 亚洲午夜私人影院| 亚洲国产另类av| 亚洲成人av福利| 日韩影院免费视频| 日本欧美一区二区三区乱码| 青青草97国产精品免费观看 | 成人免费视频国产在线观看| 国产成人亚洲精品青草天美| 国产精品一品视频| 成人丝袜视频网| 91久久精品网| 欧美日韩情趣电影| 日韩一区二区三区在线观看| 日韩欧美一区中文| 国产日本欧美一区二区| 国产精品国产a| 亚洲黄色在线视频| 视频一区中文字幕国产| 热久久一区二区| 国产精品一级在线| 99久久精品国产网站| 色呦呦国产精品| 8x福利精品第一导航| 精品国产人成亚洲区| 国产女主播视频一区二区| 亚洲欧洲中文日韩久久av乱码| 亚洲国产综合在线| 精品无人区卡一卡二卡三乱码免费卡| 国产一区二区美女| 日本韩国欧美在线| 日韩精品专区在线| 一区精品在线播放| 午夜精品久久久久久久久久| 极品美女销魂一区二区三区免费| 国产 欧美在线| 欧美日韩黄色影视| 国产欧美一区二区精品久导航| 精品一区二区三区不卡 | 国产亚洲成aⅴ人片在线观看| 国产精品短视频| 青青青伊人色综合久久| 国产成人综合网站| 欧美情侣在线播放| 中文字幕巨乱亚洲| 日本不卡视频在线观看| 91日韩精品一区| 欧美不卡在线视频| 亚洲黄网站在线观看| 国产精品主播直播| 91精品国产乱| 亚洲免费观看在线观看| 国产在线不卡一卡二卡三卡四卡| 色综合天天天天做夜夜夜夜做| 日韩欧美国产wwwww| 亚洲伦理在线免费看| 久久精品国产一区二区三区免费看| 91蜜桃视频在线| 久久亚洲欧美国产精品乐播| 五月婷婷激情综合网| 色综合欧美在线| 国产欧美精品一区aⅴ影院| 日产欧产美韩系列久久99| 91免费视频网| ㊣最新国产の精品bt伙计久久| 国产一区三区三区| 91精品国产一区二区三区| 亚洲免费电影在线| 不卡一区二区在线| 国产日产欧产精品推荐色| 久久97超碰国产精品超碰| 91精品一区二区三区久久久久久 | 色综合婷婷久久| 欧美激情一区二区三区蜜桃视频| 秋霞av亚洲一区二区三| 欧美肥妇free| 亚洲国产中文字幕| 在线日韩一区二区| 一区二区在线观看av| 色婷婷综合久久久中文一区二区| 国产精品午夜免费| 成人午夜电影小说| 国产精品视频一二三区 | 在线观看日韩电影| 亚洲色图第一区| 色综合一个色综合| 又紧又大又爽精品一区二区|