【C言語】ポインタの型とは?

目次から探す

ポインタの型の応用例

ポインタの型を使った動的メモリ割り当て

動的メモリ割り当てを行うことで、必要なだけのメモリを確保することができます。

動的メモリ割り当てを行うには、まずポインタの型に対応するメモリ領域を確保する必要があります。

C言語では、malloc関数を使ってメモリを確保します。

以下に、int型のポインタを使った動的メモリ割り当ての例を示します。

#include <stdio.h>
#include <stdlib.h>
int main() {
    int* ptr; // int型へのポインタを宣言
    int size = 5; // 確保する要素数
    // メモリの確保
    ptr = (int*)malloc(size * sizeof(int));
    // メモリの使用
    for (int i = 0; i < size; i++) {
        ptr[i] = i + 1;
        printf("%d ", ptr[i]);
    }
    // メモリの解放
    free(ptr);
    return 0;
}

上記の例では、malloc関数を使ってint型のメモリ領域を確保しています。

sizeof(int)int型のサイズをバイト単位で取得するために使用しており、これによって構造体など複雑なバイト数のデータでも正しく無駄なくメモリを確保することができます。

確保したメモリ領域は、ポインタptrに格納されます。

確保したメモリ領域を使用する際には、通常の配列と同様にアクセスすることができます。

上記の例では、forループを使ってメモリに値を代入し、表示しています。

動的に確保したメモリは、使用後に必ず解放する必要があります。

解放するためには、free関数を使います。

メモリを解放することで、他のプログラムがそのメモリを使用できるようになります。

ポインタの型を使った関数の引数の受け渡し

ポインタの型を使った関数の引数の受け渡しは、関数内での値の変更を呼び出し元に反映させるための方法です。

通常、関数に引数を渡すと、その引数は関数内でコピーされます。

しかし、ポインタの型を使うことで、引数のアドレスを渡すことができ、関数内での変更が呼び出し元に反映されます。

以下に、ポインタの型を使った関数の引数の受け渡しの例を示します。

#include <stdio.h>
void increment(int* num) {
    (*num)++; // ポインタを使ってnumの値をインクリメント
}
int main() {
    int num = 5;
    printf("変更前の値: %d\n", num);
    increment(&num); // アドレスを渡して関数を呼び出し
    printf("変更後の値: %d\n", num);
    return 0;
}

上記の例では、increment関数int型のポインタを引数として渡しています。

関数内では、ポインタを使って引数の値をインクリメントしています。

呼び出し元のnumの値も変更されるため、変更後の値が表示されます。

ポインタの型を使った関数の引数の受け渡しは、関数内での値の変更を必要とする場合や、大きなデータを効率的に扱う場合に特に有用です。

1 2 3
目次から探す