ポインタの型の応用例
ポインタの型を使った動的メモリ割り当て
動的メモリ割り当てを行うことで、必要なだけのメモリを確保することができます。
動的メモリ割り当てを行うには、まずポインタの型に対応するメモリ領域を確保する必要があります。
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
の値も変更されるため、変更後の値が表示されます。
ポインタの型を使った関数の引数の受け渡しは、関数内での値の変更を必要とする場合や、大きなデータを効率的に扱う場合に特に有用です。