Menu
Coddy logo textTech

間接参照演算子 (*)

CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 4/63。

ポインタにアドレスを格納する方法を理解したところで、次は、そのメモリ番地に格納されている実際の値にアクセスする方法を学ぶ必要があります。間接参照演算子*)を使用すると、ポインタを「辿って」そのポインタが指し示す値を取得することができます。

ポインタ変数の前に * 演算子を置くと、そのポインタが保持しているメモリ番地に格納されている値にアクセスします。「この番地にある部屋の中身をください」と言っているようなものだと考えてください。

int age = 25;
int *ptr = &age;
printf("%d", *ptr);    // 25 - ageの値を出力します

C言語において、アスタリスク(*)には2つの異なる意味があることを理解しておくことが重要です。int *ptr; のようにポインタを宣言する場合、アスタリスクは ptr がポインタであることを示します。*ptr のように既存のポインタと一緒に使用される場合、それはポインタをデリファレンス(間接参照)して、それが指し示す値にアクセスします。

間接参照演算子は、ポインタのサイクルを完結させるために不可欠です。& を使ってポインタにアドレスを格納し、* を使ってそのアドレスにある値を取得できます。これにより、メモリアドレスを通じて変数に間接的にアクセスしたり、変数を変更したりすることが可能になります。

challenge icon

チャレンジ

簡単

ポインタの宣言、アドレスの代入、およびデリファレンス(間接参照)という一連のワークフローを実演するC言語のプログラムを作成してください。プログラムの要件は以下の通りです:

  1. value という名前の整数型変数を宣言し、値 75 で初期化する
  2. price という名前の浮動小数点型変数を宣言し、値 19.99 で初期化する
  3. value_ptr という名前の整数型へのポインタを宣言する
  4. price_ptr という名前の浮動小数点型へのポインタを宣言する
  5. アドレス演算子を使用して、value のアドレスを value_ptr に代入する
  6. アドレス演算子を使用して、price のアドレスを price_ptr に代入する
  7. デリファレンス演算子を使用して、value_ptr 経由で value の値を出力する
  8. デリファレンス演算子を使用して、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;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン