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