ポインタによる変数の書き換え
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 27/63。
これで、ポインタの真の力を活用できるようになります。それは、関数を通じて元の変数を変更することです。関数にポインタを渡すと、その関数はデリファレンス演算子を使用して、そのメモリ番地に格納されている値を変更できます。
関数内では、* 演算子を使用してポインタをデリファレンスし、元の変数の値にアクセスして変更します。変数のメモリ上の場所への参照を渡しているため、この手法は 参照渡し と呼ばれます。
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // デリファレンスして元の値を変更する
}
int main() {
int x = 5;
doubleValue(&x); // xのアドレスを渡す
// xは10になりました!
return 0;
}ポイントは、代入の左辺で *ptr を使用して、ポインタが保持しているメモリ番地の値を変更することです。これにより、関数は呼び出し元の関数の変数を永続的に変更できるようになり、値渡し(pass-by-value)では到底実現できない強力なプログラミングの可能性が広がります。
チャレンジ
簡単整数の値を3倍にする関数を作成することで、ポインタを介して変数を変更する方法を示すCプログラムを作成してください。
プログラムの要件は以下の通りです:
- 整数のポインタをパラメータとして受け取る
tripleValueという名前の関数を作成します。 tripleValue関数内で、間接参照演算子を使用して、そのメモリ番地にある値を3倍にします。tripleValue関数内で、新しい値をValue tripled to: [value]という形式で出力します。main関数内で、numberという名前の整数型変数を宣言し、値 8 で初期化します。- 元の値を
Original value: [value]という形式で出力します。 tripleValue関数を呼び出し、アドレス演算子を使用してnumber変数のアドレスを渡します。- 関数呼び出しの後、
numberの最終的な値をFinal value: [value]という形式で出力します。
出力結果は、関数がポインタを介して元の変数を正常に変更したことを示す必要があります:
Original value: 8
Value tripled to: 24
Final value: 24このチャレンジは、ポインタを使用した参照渡し(pass-by-reference)の強力さを示しています。関数はポインタをデリファレンスし、そのメモリ位置の値を書き換えることで、元の変数を永続的に変更することができます。
自分で試してみよう
#include <stdio.h>
// TODO: ここに tripleValue 関数を記述してください
int main() {
// TODO: ここにコードを記述してください
// 変数 number を宣言して初期化します
// 元の値を出力します
// tripleValue 関数を呼び出します
// 最終的な値を出力します
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。