【C言語】任意の値を引数として渡す方法を解説

目次から探す

値渡し

関数に引数を渡す方法の一つに「値渡し」があります。

値渡しでは、引数として渡された値のコピーが関数内で使用されます。

つまり、関数内で引数の値を変更しても、元の値には影響を与えません。

値渡しの仕組み

値渡しでは、関数呼び出し時に引数の値がコピーされ、関数内で使用されます。

関数内で引数の値を変更しても、元の値には影響を与えません。

値渡しの仕組みを以下の例で説明します。

#include <stdio.h>
void changeValue(int num) {
    num = 10; // 引数の値を変更
}
int main() {
    int num = 5;
    printf("変更前の値: %d\n", num);
    changeValue(num);
    printf("変更後の値: %d\n", num);
    return 0;
}

上記のコードでは、changeValueという関数を定義し、引数としてnumを受け取っています。

関数内でnumの値を10に変更しています。

main関数では、変数numの初期値を5とし、その値を表示しています。

その後、changeValue関数を呼び出し、numの値を変更します。

最後に、変更後の値を表示しています。

実行結果は以下のようになります。

変更前の値: 5
変更後の値: 5

値渡しでは、関数内で引数の値を変更しても、元の値には影響を与えません。

そのため、changeValue関数内でnumの値を変更しても、main関数内のnumの値は変わりません。

値渡しは、関数内で引数の値を変更しても、元の値には影響を与えないため、安全に使用することができます。

ただし、引数の値が大きなデータ構造や配列の場合、コピーによるメモリ使用量の増加や処理時間の増加が懸念されることがあります。

参照渡し

参照渡しの仕組み

参照渡しは、関数に引数として渡された変数のメモリ上のアドレスを直接参照する方法です。

つまり、関数内で引数の値を変更すると、元の変数の値も変更されます。

参照渡しを行うためには、引数の型の前に & を付けて宣言します。

例えば、int型の変数を参照渡しする場合は、以下のように宣言します。

void func(int& num) {
    // 引数の値を変更する処理
}

参照渡しの例

以下の例では、参照渡しを使用して引数の値を変更する方法を示します。

#include <stdio.h>
void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}
int main() {
    int x = 10;
    int y = 20;
    printf("交換前:x = %d, y = %d\n", x, y);
    swap(x, y);
    printf("交換後:x = %d, y = %d\n", x, y);
    return 0;
}

上記のプログラムでは、swap関数を定義しています。

この関数は、引数として渡された2つの変数の値を交換する役割を持ちます。

main関数内で、xyの値を表示した後にswap関数を呼び出し、再度xyの値を表示しています。

実行結果は以下のようになります。

交換前:x = 10, y = 20
交換後:x = 20, y = 10

参照渡しを使用することで、swap関数内での値の交換が元の変数に反映されていることが確認できます。

参照渡しはポインタ渡しと似たような機能を持っていますが、ポインタ渡しとは異なる構文となります。

参照渡しはポインタの間接参照を意識する必要がなく、より直感的に変数の値を変更することができます。

ポインタ渡し

ポインタ渡しの仕組み

ポインタ渡しは、引数として変数のアドレスを渡す方法です。

関数内で引数のアドレスを参照することで、元の変数の値を変更することができます。

ポインタ渡しの仕組みは以下のようになります。

  1. 関数の引数として、ポインタ型の変数を宣言します。
  2. 関数呼び出し時に、変数のアドレスを引数として渡します。
  3. 関数内でポインタを通じてアドレスを参照し、値を変更します。

ポインタ渡しは、値渡しとは異なり、関数内での変数の値の変更が元の変数にも反映されるという特徴があります。

ポインタ渡しの例

以下の例では、ポインタ渡しを使って関数内で変数の値を変更する方法を示します。

#include <stdio.h>
// ポインタ渡しの関数
void changeValue(int* num) {
    *num = 100; // ポインタを通じて値を変更
}
int main() {
    int num = 10;
    printf("変更前の値: %d\n", num);
    // 関数呼び出し時に変数のアドレスを渡す
    changeValue(&num);
    printf("変更後の値: %d\n", num);
    return 0;
}

このプログラムでは、changeValue関数numのアドレスを渡しています。

関数内でポインタを通じて値を変更するため、numの値が100に変わります。

実行結果は以下のようになります。

変更前の値: 10
変更後の値: 100

このように、ポインタ渡しを使うことで関数内で変数の値を変更することができます。

ポインタ渡しは、特定の変数の値を関数内で変更する場合に有用な方法です。

1 2 3

この記事のページ一覧
  1. 現在のページ
目次から探す