セクション 6. 章 2
single
参照とデリファレンス
メニューを表示するにはスワイプしてください
ポインタは、2つの演算子を中心に構成されています:
- アドレス演算子
& - デリファレンス演算子
*
アドレス演算子
アドレス演算子(& で表される)は、コンピュータのRAMと直接やり取りすることを可能にします。& を使用することで、オブジェクトの実際のメモリアドレスを取得できます。
Main.c
123456789101112#include <stdio.h> int main() { int x = 100; printf("Value of variable: %d\n", x); printf("Address of variable into RAM: %p\n", &x); // using reference operator `&` for getting address return 0; }
注意
**アドレス(ポインタ)**を出力する際に使用するフォーマット指定子は %p です。
アドレスは通常、16進数表記で表されます。
間接参照演算子
一方、* 演算子はアドレスを指定すると、そのアドレスに格納されている値(住人の名前)を取得します。それでは、アドレスを直接扱っていない場合、この演算子をどのように利用できるでしょうか?例えば、&x のような式は変数 x のアドレスを返しますが、これに * 演算子を適用した場合(*&x)、そのアドレスに格納されている変数の値を取得できます。
注意
本質的に、*&x は x と同じ意味。
Main.c
1234567891011121314#include <stdio.h> int main() { int x = 100; printf("Value of variable: %d\n", x); printf("Address of variable in RAM: %p\n", &x); // using reference operator `&` printf("Dereferencing address of variable: %d", *(&x)); // using dereference operator `*` return 0; }
注意
間接参照演算子(*x)と乗算演算子(x*y)を混同しないこと。
タスク
スワイプしてコーディングを開始
- 5要素の整数型配列を作成し、値を代入します。
- 3番目の要素のアドレスを取得します。
- 3番目の要素のアドレスをインクリメントし、そのアドレスをデリファレンスして指している値を出力します。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 6. 章 2
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください