C言語 - 関数の実パラメータと仮パラメータ_学習ノート

導入

プログラミングにおけるC言語と関数の重要性

小説「雪中の剣士」の一節は、C 言語で関数の重要性を要約しています:「もし天が私を生まなかったなら、李春港、剣は夜のように長かっただろう。」プログラミングにおける李春剛の剣のそれと同じです。

C 言語関数は、コードの再利用、モジュール設計、関数パラメータ、関数呼び出しスタック、再帰において重要な役割を果たします。関数を適切に使用すると、プログラムの効率、可読性、保守性が向上します。

機能コンポーネント

C 言語の関数は次の部分で構成されます。

  1. 関数名: 関数名は関数の識別子であり、プログラム内で関数を呼び出すために使用されます。関数の動作を理解しやすいように、関数名はわかりやすいものにする必要があります。
  2. パラメータ リスト: パラメータ リストには、関数によって受け入れられる入力パラメータのタイプ、順序、数が含まれます。パラメータ リストの各パラメータにはタイプと識別子があります。
  3. 関数戻り値の型: 関数戻り値の型は、関数の実行後に返されるデータ型です。関数が値を返さない場合、戻り値の型は void です。
  4. 関数本体: 関数本体は、関数を実行するための特定のコード ブロックを含むステートメントのブロックです。入力パラメータの処理や戻り値の計算など、関数の実行方法を定義します。

関数を作成するには、上記の基本要素が含まれている必要があります。

以下は、C 言語関数の構成を示す簡単な例です。

int add(int a, int b)  // 函数名:add,参数列表有两个 int 类型的参数 a 和 b
{
    
       
    int result = a + b;    // 计算 a 和 b 的和,存储到 result 变量中
    return result;         // 返回 result 的值
}

この例では、関数名は add です。パラメータ リストには 2 つの int 型パラメータ a と b があります。関数の戻り値の型は int です。関数本体には、a と b の合計を計算し、結果を結果に格納するステートメントが含まれています最後に、return ステートメントを通じて result の値が返されます。

C 言語では、仮パラメータと実パラメータは関数の重要な部分です。

仮パラメータの概要

仮パラメータ:正式名称は「仮パラメータ」です。関数定義時に関数名の後ろに括弧内に記載される変数で、関数呼び出し時に渡されるパラメータを受け取るために使用されます。

仮パラメータの役割は、呼び出し元の関数と呼び出される関数の関係を実現することであり、通常、関数が処理するデータ、関数の機能に影響を与える要因、関数の処理結果などが仮パラメータとして使用されます。

実際のパラメータの概要

実パラメータ:完全な名前は「実パラメータ」です。実パラメータは、関数を呼び出すときに関数に渡される実際の値です。定数、変数、または式を使用できます。

実パラメータの役割は、関数の実行に必要なデータを提供することであり、関数内で使用されます。

実パラメータと仮パラメータの関係

で、実パラメータと仮パラメータは、数、型、順序が一致していなければなりません。そうでないとコンパイル エラーが発生します。

C言語では仮引数と実引数のデータ型には互換性がある必要がありますつまり、それらの間で型変換を実行できます。

具体的には、仮パラメータが int などの基本データ型で、実パラメータが double 型の場合、実パラメータは型変換によって double 型を int 型に変換してから仮パラメータに渡します。

仮パラメータが構造体タイプであり、実パラメータが異なる構造体タイプである場合、構造体の代入またはコピーを通じて、実パラメータを仮パラメータと同じ構造体タイプに変換する必要があります。

仮パラメータがポインタ型であり、実パラメータが異なるポインタ型である場合、ポインタ変換によって実パラメータを仮パラメータと同じポインタ型に変換する必要があります。

つまり、関数が呼び出されるとき、実パラメータのデータ型は仮パラメータと互換性があるか、型変換によって互換性のある型に変換できる必要があります。

仮パラメータと実パラメータの違い

ライフサイクルの違い

仮パラメータの有効範囲は関数内に限定されており、関数の実行が終了すると仮パラメータのライフサイクルも終了します。
通常、実パラメータの有効範囲は関数呼び出し期間に限定されており、関数が終了すると実パラメータのライフサイクルも終了します。

ライフサイクルの観点から見ると、仮パラメータのライフサイクルは実際のパラメータのライフサイクルよりも短くなります。

保管場所の違い

実パラメータと仮パラメータには別々の記憶領域があり、それらの間でメモリを共有しません。

#include <stdio.h>

void func(int a, int b) 
{
    
    
    printf("a = %p, b = %p\n", &a, &b);
}

int main()
 {
    
    
    int x = 10, y = 20;
    printf("x = %p, y = %p\n", &x, &y);
    func(x, y);
    return 0;
}

ここに画像の説明を挿入します上の図に示すように、x と y のアドレスは、a と b のアドレスとは異なることがわかります。
ここに画像の説明を挿入します
上の図に示すように、x と y は a と b の値を取得しますが、x と y のアドレスは a と b のアドレスとは異なるため、次のように理解できます。仮パラメータは実際のパラメータの一時的なコピーです。

おすすめ

転載: blog.csdn.net/yjagks/article/details/132116681