アドレス演算子 (&)
CoddyのCジャーニー「論理と制御フロー」セクションの一部。レッスン 3/63。
ポインターを宣言できるようになったので、次は実際にポインターにメモリアドレスを格納する方法を学ぶ必要があります。アドレス演算子(&)は、任意の変数のメモリアドレスを取得するための鍵です。
変数名の前に & 演算子を置くと、その変数が格納されているメモリアドレスが返されます。「この変数はメモリ上のどこにあるのか?」と尋ねていると考えてください。
int age = 25;
int *ptr;
ptr = &age; // 'age' のアドレスを 'ptr' に格納するこの例では、&ageによってage変数のメモリアドレスが得られます。次に、このアドレスをポインターptrに代入します。これでptrはage変数を「指す」ようになります。
アドレス演算子は、通常の変数とポインターをつなぐ橋渡しとなるため不可欠です。これがなければ、どの変数を指すべきかをポインターに伝えることができません。データ型は一致していなければならないことを覚えておきましょう。整数のアドレスは、整数用に宣言されたポインターにのみ代入できます。
チャレンジ
簡単変数とポインターをアドレス演算子で結び付ける方法を示す C プログラムを作成してください。プログラムでは、次のことを行います。
numberという名前の整数変数を宣言し、値 42 で初期化するletterという名前の文字変数を宣言し、値 'X' で初期化するnum_ptrという名前の整数へのポインターを宣言するchar_ptrという名前の文字へのポインターを宣言する- アドレス演算子を使用して、
numberのアドレスをnum_ptrに代入する - アドレス演算子を使用して、
letterのアドレスをchar_ptrに代入する %p書式指定子を使用したprintfで、両方のポインターに格納されたアドレスを出力する
出力には、ポインターのアドレスを次の形式で表示してください。
Address of number: [address]
Address of letter: [address]実際のメモリアドレスはプログラムの実行ごとに異なりますが、形式とラベルは上記のとおり完全に一致していなければなりません。[address]は出力されるアドレスのプレースホルダーです。角括弧は出力しないでください。
自分で試してみよう
#include <stdio.h>
int main() {
// TODO: ここにコードを書いてください
// 1. 変数を宣言して初期化する
// 2. ポインタを宣言する
// 3. アドレス演算子を使ってアドレスを代入する
// 4. 示された形式を使ってアドレスを出力する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理と制御フローのすべてのレッスン
自分で練習してみよう: Cオンラインコンパイラ