C言語のカスタム関数の実現

6747 ワード

カスタム関数の役割:
  • コードの管理が便利で、プログラムを書くときの考え方がはっきりしています.
  • コードは多重化され、同じセグメントのコードは異なる場所で複数回実行することができる.

  • 関数宣言:
    使用:値タイプ関数名(タイプ変数名、タイプ変数名、...)を返します.たとえば、int sum(int num1, int num2);実際には、関数宣言時に変数の名前は重要ではありません.戻り値タイプのみが返され、関数名と変数のタイプはコンパイラが知らなければならないので、変数名は無視できます.次の声明も正しい:int sum(int , int);注意:
  • c言語は一般的に関数の機能に基づいて関数名を取り、すべて小文字の単語を使用し、複数の単語の間を下線で区切っています.例えば、add_to_arr.
  • パラメータの個数、タイプは関数の機能によって決定され、呼び出されると呼び出し者によって提供される.関数にパラメータが必要ない場合はvoidを書き、空にしないでください.
  • 戻り値タイプは、関数の結果に基づいて決定され、戻り値が必要でなければvoidが書き込まれる.
  • 関数の定義が呼び出しの前に表示される場合、宣言は省略できます.
  • 関数宣言の場合、パラメータの変数名は省略できます.
  • 戻り値タイプを書かない場合(警告がある場合)、デフォルトはintタイプ戻り値です.
  • 関数の定義:
    使用:戻り値タイプ関数名(タイプ変数名、タイプ変数名、...){関数体;return(データ);}例:
    int sum(int a, int b)
    {
    	return a + b;
    }
    

    関数の呼び出し:
    使用:関数(データ1、データ2...);たとえば、sum(1, 2);の戻り値は、関数の実行が完了した後、呼び出し位置に配置され、処理方法:
  • は変数に格納され、長期にわたって使用される.
  • は直ちに使用され、演算を表示または参加することができる.

  • 関数間のパラメータの転送(値の転送):
  • 呼び出し者は被呼び出し者に伝達され、実パラメトリックから形パラメトリックに伝達される.
  • 異なる関数のネーミング空間は互いに独立しており、関数間の変数名は再名でき、互いに影響しない.同じ関数では、同じ名前の変数は定義できませんが、同じプログラムのグローバル変数名と関数のローカル変数名は同じ名前でかまいませんが、この関数では同じ名前のグローバル変数は参照できません.
  • 関数呼び出し時に、変調された関数はパラメータに新しいメモリ空間を開き、メイン関数の実パラメータはこの空間に値を与え、パラメータは実パラメータのコピーのようなものです.したがって、変調関数では、パラメータ値の変更は実パラメータ値に影響しません.変調関数が終了すると,この空間は回収され,パラメータデータは存在せず,実パラメータは呼び出し前の実パラメータである.
  • 関数間では、値伝達によって変数を共有することはできません.注意:配列が関数のパラメータとして使用されている場合(関数呼び出し時に渡される配列がポインタタイプになり、リファレンスが渡されます)、長さが失われ、パラメータを追加して長さを渡す必要があります.

  • #include 
    void func(int arr[])		//  ,    int* arr
    {
    	for(int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
    		printf("%d
    "
    ,arr[i]); // , 1 } int main() { int arr[5] = {1,2,3,4,5}; func(arr); }
  • 被呼び出し者は呼び出し者に伝達され、returnを使用してデータを返す.
  • return文を書かなくても戻り値があります.
  • 呼び出し者と呼び出し者は、メモリに戻り値を格納するための空間を約束します.return文の機能の1つは、データをこの空間に格納することです.return文を書かないと、呼び出し元はデフォルト値(不確定)を取得します.
  • #include 
    int func(void)
    {
    	int arr[20] = {};		//      ,   1,   ,   0。
    }
    
    int main()
    {
    	int num = 9999;
    	num = func();
    	printf("%d
    "
    ,num); }