C Primer Plus学習_33第九章------関数関数の初認識(上)

3194 ワード


第九章------関数
この章では、次の内容について説明します.
 
  • キーワード:return
  • 演算子:*(一元),&(一元)
  • 関数およびその定義方法
  • パラメータと戻り値
  • の使用方法
  • ポインタ変数を関数パラメータ
  • として使用する方法
  • 関数タイプ
  • ANSICプロトタイプ
  • 再帰
  • プログラムの編成方法Cの設計思想は,関数を構築の速さとして用いることである.printf()、scanf()、getchar()、strlen()などのC標準ライブラリの関数を使用しました.次に検討するのは、自分で関数を作成することです.前の章ではすでに紹介されていますが、次に前に学んだ知識を強固にし、さらに広げます.
    復習関数
    関数(function)は、特定のタスクを完了する独立したコード単位である.Cの関数は、他の言語の関数、サブルーチン、方法、プロセスと同じ役割を果たすが、詳細はやや異なる.printf()のようにデータをスクリーンに印刷する動作を実行する場合もある.いくつかの関数は、strlen()が指定した文字列の長さをプログラムに返すなどの値をプログラムに提供します.
    なぜ関数を使用するのですか?
     
     
  • は、コード多重性を向上させる.プログラムがタスクを複数回完了する場合は、適切な関数を記述して繰り返し使用すれば、大きなセグメントの同じ機能を持つコードを繰り返すことを避けることができ、この関数を使用すれば問題を解決することができます.あるいは、異なるプログラムでもこの関数を使用することができます.
  • 関数はプログラムをモジュール化し、可読性を増加させる.あるタスクを一度だけ完了する必要がある場合でも、関数を使用する価値があります.
  • は一連の数字を読み込みます.
  • はこれらの数字を分類する.
  • これらの数字の平均値を見つけます.
  • 柱図を印刷します.





  • 関数は、入力情報(入力)とその生成値や応答の動作(出力)に基づいて定義される「ブラックボックス」と見なすことができる.自分で書いた関数でなければ、一部の関数実装の詳細ではなく、ブラックボックスの内容(printf()など)に関心を持たず、プログラムの全体設計に集中する.
    次に、関数を正しく定義する方法、関数を呼び出す方法、関数間の通信を確立する方法について説明します.
    この章の最初のプログラム:
    /*lethead1.c*/ 
    #include
    #define NAME "GIGATHINK,INC"
    #define ADDRESS "101 Megabake Plazz"
    #define PLACE "Megapolie, CA 94904"
    #define WIDTH 40
    
    void starbar(void);	//    
     
    int main (void)
    {
    	starbar();		//     
    	printf("%s
    ", NAME); printf("%s
    ", ADDRESS); printf("%s
    ", PLACE); starbar(); return 0; } void starbar (void){// int count; for(count = 1; count <= WIDTH; count++){ putchar('*'); } putchar('
    '); }

    実行結果は次のとおりです.
    **************************************** GIGATHINK,INC 101 Megabake Plazz Megapolie, CA 94904 ****************************************
    分析:
     
  • プログラムは3つの場所でstarbar識別子:関数プロトタイプを使用し、コンパイラ関数starbar()のタイプを教えた.関数呼び出しは、ここで関数が実行されていることを示します.関数定義.関数が何をするかを指定します.
  • 関数は変数と同様に、複数のタイプ(void,int,double......)があります.任意のプログラムは、関数を使用する前に関数のタイプを宣言します.
  •  
    void starbar(void);	//    

    この行にカッコ()が含まれていることは、starbarが名前であるかどうかを示します.最初のvoidは関数タイプであり、関数に戻り値がないことを示します.2番目のvoid(カッコ)は、関数にパラメータがないことを示します.";"これは宣言関数であり、定義関数ではないことを示します.一般的に、関数プロトタイプは戻り値タイプと受信したパラメータタイプを示します.ここではstarbar()という戻り値のない無パラメータ関数を使用して、コンパイラに関数定義を別の場所に探すように伝えます.
     
  • プログラムはstarbar()関数をmain()の前にプロトタイプし,別の場所に置いてもよい.
  • main()の実行中にstarbar()関数が呼び出されました:
  •  
    	starbar();		//     

    これはvoidタイプ関数を呼び出す形式です.「starbar();「文4では、関数定義が見つかり、実行されます.starbar()のコード計算機を実行すると、main()の次の行に戻ります.
     
  • プログラムではstarbar()とmain()の定義形式が同じです.ここの関数ヘッダstarbar()の後ろには「;」は付いていません.はい、呼び出しや宣言ではなく、コンパイラにstarbar()を定義するように伝えます.
  • プログラムはstarbar()とmain()を同じファイルに格納します(もちろん2つのファイルにも格納できますが、後述).
  • starbar()関数の変数countは、starbar()にのみ属する局所変数を使用します.プログラムの他の場所でcount変数を使用することを定義するのは、ここのcountとは関係なく、異なる変数です.

  • starbar()をブラックボックスと見なす場合、呼び出しに他の情報が必要ないため、「*」の行を印刷して関数に入力する必要はありません.同時にstarbar()も値を返さないので、main()の情報も提供しません.簡単に言えばstarbar()はプライマリ関数と通信する必要はありません.