間接参照演算子
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 3/56。
変数へのポインタを取得できるようになったので、そのメモリ番地にある値にアクセスし、変更する方法を学ぶ必要があります。ここで、デリファレンス演算子(*)が不可欠になります。
デリファレンス演算子 * は、ポインタが指しているメモリ番地に格納されている値にアクセスするために使用されます。ポインタ変数の前に * を置くと、そのアドレスを「たどり」、そこに格納されている実際の値を取得できます。
int number = 42;
int* ptr = &number; // ptrはnumberのアドレスを格納します
int value = *ptr; // valueは42になりますデリファレンス演算子を使用して、ポインタを介して元の変数を変更することもできます。*ptr に新しい値を代入すると、実際にはそのメモリ位置に格納されている値を変更していることになります。
*ptr = 100; // numberを100に変更します
// ptrを通じて変更しましたが、numberは現在100になっていますこの間接的なアクセスこそが、ポインタを非常に強力なものにしている理由です。それらへのポインタを持っている限り、プログラムのどこからでも変数を読み取ったり変更したりすることができます。
チャレンジ
簡単ポインタを介して変数の値を変更することにより、間接参照演算子を実演するプログラムを作成してください。
以下の入力が提供されます:
- 変数の初期値を表す整数
- ポインタを介して代入する新しい値を表す整数
プログラムは以下の手順を行う必要があります:
temperatureという名前の整数型変数を宣言し、最初の入力値で初期化しますtemperature変数を指すtempPtrという名前のポインタを作成します- ポインタを間接参照して元の値を出力します
- 間接参照演算子を使用して、ポインタを介して
temperatureの値を2番目の入力値に変更します - 再度ポインタを間接参照して新しい値を出力します
以下の正確な出力形式を使用してください:
Original value: [original value]
New value: [new value]チートシート
デリファレンス演算子 * は、ポインタが指しているメモリ番地に格納されている値にアクセスするために使用されます。
int number = 42;
int* ptr = &number; // ptrはnumberのアドレスを格納します
int value = *ptr; // valueは現在42を保持していますまた、デリファレンス演算子を使用して、ポインタを介して元の変数を変更することもできます。
*ptr = 100; // numberを100に変更します
// ptrを介して変更しましたが、numberは現在100になっていますこの間接的なアクセスにより、ポインタさえあれば、プログラムのどこからでも変数を読み取ったり変更したりすることができます。
自分で試してみよう
#include <iostream>
using namespace std;
int main() {
// 入力値を読み込む
int initialValue, newValue;
cin >> initialValue;
cin >> newValue;
// TODO: 以下にコードを記述してください
// 1. temperature変数を宣言し、initialValueで初期化する
// 2. temperatureを指すポインタtempPtrを作成する
// 3. ポインタの間接参照を使用して元の値を出力する
// 4. ポインタを使用してtemperatureの値をnewValueに変更する
// 5. ポインタの間接参照を使用して新しい値を出力する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。