第7章,函數

函數

函數定義

K&R 和ANSI有差別

return expression;

return 語句允許你從函數體的任何位置返回,并不一定要在函數體的末尾。expression可以省略,直接來一個return ;這個時候函數的類型就聲明為void;

函數聲明

1、原型

(提前判斷我們函數調用正確與否的方法)

方式一:

方式二:

如果函數的原型同時也被#include指令包含到定義函數的文件中,編譯器還可以確認函數原型域函數定義是否匹配。

2、函數的缺省認定

對于無法見到函數原型的情況,編譯器會假定在這個函數的調用時參數的類型和數量是正確的,它同時會假定函數將返回一個整形值。對于哪些返回值并非整形的函數而言,這種隱式的認定常常導致錯誤。

函數的參數

C函數的所有參數均以“按值調用”方式進行傳遞,這意味著函數將獲得參數值的一份拷貝。這里需明確的是函數傳遞數組名的時候實際上傳遞的是數組的指針,這個值是一份指針的拷貝,所以可以影響到原數組。

ADT和黑盒

如下7.5a和7.5b文件

可變參數列表

1、stdarg宏

/*

**大凡子寫的可變參數的demo,用于計算指定數量的值的平均值

*/

#include

float average(int n_values,...)

{

va_list var_arg;

int count;

float sum=0;

/*

**1、初始化va_list變量

*/

va_start(var_arg,n_values);

for(count=0;count

{

/*

**2、通過指定參數類型,依次訪問可變按參數

*/

sum +=va_arg(var_arg,int);

}

/*

**3、訪問完畢最后一個可變參數后,需要va_end

*/

va_end(var_arg);

return sum/n_values;

}

void main()

{

float a;

a=average(8,1,2,3,4,5,6,7,8);

printf("%f\n",a);

}

2、可變參數的限制

補充:對于哪些沒有原型的函數,傳遞給函數的實參將進行缺省參數提升;char和short類型的實參轉換為int,float類型的實參轉換為double類型。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • [toc] 第7章 函數 7.1 任意參數 *args **kwargs 使用 7.2 只能接受關鍵字參數 (py...
    brother阿張閱讀 223評論 0 0
  • 我們在C語言編程中會遇到一些參數個數可變的函數,例如printf() 這個函數,它的定義是這樣的: int pri...
    Mr_Me閱讀 767評論 0 2
  • 1、定義函數的兩種方式:1)函數聲明:存在函數聲明提升2)函數表達式:使用前必須先賦值;匿名函數(拉姆達函數) 2...
    94小輝閱讀 307評論 0 0
  • //不要這么做 因為不同瀏覽器對上面代碼理解不同,ie不管condition是否為真,都會執行alert('Yo!...
    __越過山丘__閱讀 149評論 0 0
  • 不再喜歡憂傷 我要跟它決斷 盡管 那是我曾經的最愛 看到落葉憂傷 看到新芽也惆悵 皺起眉頭 把它擰成疙瘩 就像 現...
    自我覺察日記本閱讀 227評論 22 9