間接参照演算子 (*)
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 4/63。
ポインタにアドレスを格納する方法を理解したところで、次は、そのメモリ番地に格納されている実際の値にアクセスする方法を学ぶ必要があります。間接参照演算子(*)を使用すると、ポインタを「辿って」そのポインタが指し示す値を取得することができます。
ポインタ変数の前に * 演算子を置くと、そのポインタが保持しているメモリ番地に格納されている値にアクセスします。「この番地にある部屋の中身をください」と言っているようなものだと考えてください。
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // 25 - ageの値を出力しますC言語において、アスタリスク(*)には2つの異なる意味があることを理解しておくことが重要です。int *ptr; のようにポインタを宣言する場合、アスタリスクは ptr がポインタであることを示します。*ptr のように既存のポインタと一緒に使用される場合、それはポインタをデリファレンス(間接参照)して、それが指し示す値にアクセスします。
間接参照演算子は、ポインタのサイクルを完結させるために不可欠です。& を使ってポインタにアドレスを格納し、* を使ってそのアドレスにある値を取得できます。これにより、メモリアドレスを通じて変数に間接的にアクセスしたり、変数を変更したりすることが可能になります。
チャレンジ
簡単ポインタの宣言、アドレスの代入、およびデリファレンス(間接参照)という一連のワークフローを実演するC言語のプログラムを作成してください。プログラムの要件は以下の通りです:
valueという名前の整数型変数を宣言し、値 75 で初期化するpriceという名前の浮動小数点型変数を宣言し、値 19.99 で初期化するvalue_ptrという名前の整数型へのポインタを宣言するprice_ptrという名前の浮動小数点型へのポインタを宣言する- アドレス演算子を使用して、
valueのアドレスをvalue_ptrに代入する - アドレス演算子を使用して、
priceのアドレスをprice_ptrに代入する - デリファレンス演算子を使用して、
value_ptr経由でvalueの値を出力する - デリファレンス演算子を使用して、
price_ptr経由でpriceの値を小数点以下ちょうど2桁で出力する
出力は、デリファレンスされた値を以下の形式で表示する必要があります:
Value through pointer: 75
Price through pointer: 19.99このチャレンジでは、デリファレンス演算子がポインタに格納されたアドレスを辿ることによって、元の変数の値をどのように取得するかについての理解をテストします。
チートシート
間接参照演算子(*)を使用すると、ポインタが保持しているメモリ番地に格納されている値にアクセスできます。
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // 25(ageの値)を出力しますC言語において、アスタリスク(*)には2つの異なる意味があります:
int *ptr;のような宣言では、ptrがポインタであることを示します*ptrのように既存のポインタに使用すると、ポインタを間接参照して、それが指し示す値にアクセスします
間接参照演算子はポインタのサイクルを完結させます。つまり、& でアドレスを格納し、* でそのアドレスにある値を取得します。
自分で試してみよう
#include <stdio.h>
int main() {
// TODO: ここにコードを記述してください
// 1. 変数を宣言して初期化する
// 2. ポインタを宣言する
// 3. ポインタにアドレスを代入する
// 4. デリファレンスされた値を出力する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。