C 函數(shù)

2018-07-05 17:08 更新

學(xué)習(xí)C - C函數(shù)

變量作用域和生命周期

這個(gè)例子涉及一個(gè)循環(huán)的嵌套塊:

你在循環(huán)塊中聲明和定義count2:

count2在每次循環(huán)迭代時(shí)重新創(chuàng)建,初始值為0。

在每個(gè)循環(huán)迭代期間,count2被創(chuàng)建,初始化,遞增和銷毀。

變量count1存在于main()塊級(jí)別。

它在遞增時(shí)繼續(xù)存在。


    #include <stdio.h>
    int main(void) {
      int count1 = 1;                               // Declared in outer block

      do {
        int count2 = 0;                             // Declared in inner block
        ++count2;
        printf("count1 = %d     count2 = %d\n", count1, count2);
      } while( ++count1 <= 10);

      // count2 no longer exists

      printf("count1 = %d\n", count1);
      return 0;
    }

上面的代碼生成以下結(jié)果。

新作用域

以下代碼有兩個(gè)名為count的變量。

在循環(huán)塊內(nèi),局部變量將“隱藏”存在于main()塊級(jí)別的count版本。

count是指的是在當(dāng)前塊的聲明。

在do-while循環(huán)中,只能達(dá)到局部版本的count。

循環(huán)塊中的printf()顯示局部count值,該值始終為1。

一旦退出循環(huán),外部count變量變?yōu)榭梢?jiàn),最后一個(gè)printf()從循環(huán)中顯示其最終值。


    #include <stdio.h>
    int main(void) {
      int count = 0;                                // Declared in outer block
      do {
        int count = 0;                              // This is another variable called count
        ++count;                                    // this applies to inner count
        printf("count = %d\n", count);
      }
      while( ++count <= 10);                // This works with outer count

      printf("count = %d\n", count);       // Inner count is dead, this is outer count
      return 0;
    }

上面的代碼生成以下結(jié)果。

變量作用域和函數(shù)

每個(gè)函數(shù)的主體是一個(gè)塊。

在函數(shù)中聲明的變量是局部的函數(shù)。

定義函數(shù)

函數(shù)的一般形式如下所示:

Return_type  Function_name(type1 para1, type2 para2,...) {
   // Statements...
}

函數(shù)體中的語(yǔ)句可以不存在。

從一個(gè)函數(shù)的返回值與body中的語(yǔ)句被指定為void。

對(duì)于具有非void返回類型的函數(shù),其返回語(yǔ)句必須返回指定返回類型的值。

該參數(shù)指定在調(diào)用函數(shù)時(shí)應(yīng)傳遞給該函數(shù)的值的類型。

傳遞給與參數(shù)相對(duì)應(yīng)的函數(shù)的值稱為參數(shù)。

函數(shù)參數(shù)由參數(shù)名稱后面的類型組成。

調(diào)用函數(shù)的一般形式是以下表達(dá)式:

Function_name(argument1, argument2, ...)

您使用函數(shù)的名稱后跟一個(gè)括號(hào)中的逗號(hào)分隔的參數(shù)列表。

一個(gè)函數(shù)調(diào)用本身可以作為一個(gè)語(yǔ)句顯示,如下所示:

printf("hi.");

這樣調(diào)用的函數(shù)可以是一個(gè)返回值的函數(shù)。

在這種情況下,返回的值被丟棄。

已經(jīng)使用void返回類型定義的函數(shù)只能這樣調(diào)用。

返回值的函數(shù)可以在表達(dá)式中。

例如:

result = 2.0*sqrt(2.0);

函數(shù)命名和參數(shù)

函數(shù)的名稱可以是C中的任何合法名稱。

函數(shù)參數(shù)是需要指定的參數(shù)的占位符。

函數(shù)的參數(shù)是具有其類型的參數(shù)名稱列表,連續(xù)的參數(shù)用逗號(hào)分隔。

將參數(shù)傳遞給函數(shù)時(shí),將參數(shù)值復(fù)制到函數(shù)中。

返回值類型

我們?cè)賮?lái)看一下函數(shù)的一般形式:

Return_type  Function_name(...
{
   // Statements...
}

Return_type指定函數(shù)返回的值的類型。

函數(shù)原型

您可以先定義main()函數(shù),然后定義函數(shù)Average()。

// #include ...

int main(void) {
   ...

   Average...
}

double Average(double x[], size_t n) {
   ...
}

這不會(huì)編譯。

當(dāng)編譯器看到main()中的Average()函數(shù)時(shí),它不會(huì)知道Average()函數(shù)。

我們可以使用函數(shù)原型來(lái)解決這個(gè)問(wèn)題。

函數(shù)聲明或函數(shù)原型是定義函數(shù)原型的語(yǔ)句。

函數(shù)原型定義函數(shù)的名稱,返回值類型以及每個(gè)參數(shù)的類型。

一個(gè)函數(shù)的原型與函數(shù)頭完全相同,后綴中帶有一個(gè)分號(hào)。

以下代碼顯示了如何創(chuàng)建函數(shù)原型。

// Function prototypes
double Average(double data_values[], size_t count);

int main(void) {
  ...
}

// Definitions for Average()
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)