【C言語】関数の引数にポインタを渡す方法について解説

この記事では、C言語においてポインタを引数とする関数の定義と呼び出し方について解説します。

初心者の方でもわかりやすく、ポインタを引数とする関数の基本的な使い方を学ぶことができます。

目次から探す

ポインタを引数とする関数の定義と呼び出し方

ポインタを引数とする関数の定義

C言語では、関数の引数にポインタを渡すことができます。

ポインタを引数とする関数を定義するには、関数の引数の型にポインタを指定します。

具体的な定義方法は以下の通りです。

void 関数名(データ型* ポインタ名) {
    // 関数の処理
}

上記の例では、データ型はポインタが指すデータの型を表します。

ポインタ名はポインタ変数の名前を指定します。

ポインタを引数とする関数の呼び出し方

ポインタを引数とする関数を呼び出す際には、引数にポインタ変数を渡します。

具体的な呼び出し方は以下の通りです。

データ型 変数名;
関数名(&変数名);

上記の例では、データ型はポインタが指すデータの型を表します。

変数名はポインタ変数の名前を指定します。

ポインタを引数とする関数を呼び出す際には、引数にポインタ変数のアドレスを渡す必要があります。

そのため、引数には&演算子を使用してポインタ変数のアドレスを指定します。

以下に、ポインタを引数とする関数の定義と呼び出し方の例を示します。

#include <stdio.h>
// ポインタを引数とする関数の定義
void increment(int* num) {
    (*num)++;
}
int main() {
    int num = 5;
    // ポインタを引数とする関数の呼び出し
    increment(&num);
    printf("numの値: %d\n", num);  // 出力結果: numの値: 6
    return 0;
}

上記の例では、incrementという関数を定義しています。

この関数は、引数としてint*型のポインタを受け取り、ポインタが指す変数の値を1増やす処理を行います。

main関数内で、numという変数を宣言し、初期値を5とします。

その後、increment関数を呼び出す際には、&numという引数を指定しています。

これにより、increment関数内でnumの値が1増え、最終的にprintf関数numの値を表示します。

以上が、ポインタを引数とする関数の定義と呼び出し方についての解説です。

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

ポインタを引数とする関数の具体的な例

ポインタを引数とする関数は、引数として渡された変数のアドレスを受け取り、そのアドレスを通じて変数の値を変更することができます。

ここでは、配列と構造体を引数とする関数の具体的な例を紹介します。

配列を引数とする関数

配列を引数とする関数では、配列の先頭要素のアドレスをポインタとして受け取ります。

以下の例では、引数として渡された配列の要素を2倍にする関数を定義しています。

#include <stdio.h>
// 配列の要素を2倍にする関数
void doubleArray(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        arr[i] *= 2;
    }
}
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    printf("変更前の配列: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    doubleArray(arr, size);
    printf("変更後の配列: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

上記のコードでは、doubleArray関数が配列の要素を2倍にする処理を行っています。

main関数では、配列を定義し、その要素を表示した後にdoubleArray関数を呼び出しています。

呼び出し後に再度配列の要素を表示することで、関数による変更が反映されていることを確認できます。

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

変更前の配列: 1 2 3 4 5
変更後の配列: 2 4 6 8 10

構造体を引数とする関数

構造体を引数とする関数では、構造体のアドレスをポインタとして受け取ります。

以下の例では、引数として渡された構造体のメンバ変数を変更する関数を定義しています。

#include <stdio.h>
// 構造体のメンバ変数を変更する関数
void changeMember(struct Person* person, int age, double height) {
    person->age = age;
    person->height = height;
}
// 構造体の定義
struct Person {
    char name[20];
    int age;
    double height;
};
int main() {
    struct Person person;
    printf("変更前の情報\n");
    printf("名前: %s\n", person.name);
    printf("年齢: %d\n", person.age);
    printf("身長: %.1f\n", person.height);
    changeMember(&person, 25, 170.5);
    printf("変更後の情報\n");
    printf("名前: %s\n", person.name);
    printf("年齢: %d\n", person.age);
    printf("身長: %.1f\n", person.height);
    return 0;
}

上記のコードでは、changeMember関数が構造体のメンバ変数を変更する処理を行っています。

main関数では、構造体を定義し、そのメンバ変数の初期値を表示した後にchangeMember関数を呼び出しています。

呼び出し後に再度メンバ変数の値を表示することで、関数による変更が反映されていることを確認できます。

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

変更前の情報
名前:
年齢: 0
身長: 0.0
変更後の情報
名前:
年齢: 25
身長: 170.5

以上が、ポインタを引数とする関数の具体的な例です。

配列や構造体を引数とする関数を使うことで、より柔軟なプログラムを作成することができます。

1 2

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