ポインタの宣言
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 2/63。
ポインタが何であるかを理解できたところで、次はポインタの作成方法について学びましょう。ポインタ変数を宣言する際は、そのポインタがどのタイプのデータを指すのかをコンパイラに伝える特定構文に従います。
ポインタを宣言するための基本構文は次のとおりです: data_type *pointer_name;
int *ptr; // 整数へのポインタを宣言する
char *ch_ptr; // 文字へのポインタを宣言する
float *f_ptr; // 浮動小数点数へのポインタを宣言するアスタリスク(*)こそが、これをポインター宣言にしている要素です。これにより、この変数には実際のデータ値ではなく、メモリーアドレスが格納されることがコンパイラーに伝えられます。int *ptr; と宣言することは、「ptr は整数型変数のアドレスを格納できるポインターである」と伝えていることになります。
ポインタがまだ有効なメモリアドレスを指していない場合は、NULL に初期化することが良いプラクティスです。これにより、ポインタがランダムなメモリ領域を指すのを防ぐことができます: int *ptr = NULL;
printfを使用してポインタのアドレスを出力する場合、%pフォーマット指定子を使用します。互換性と正確なフォーマットを確保するために、ポインタを(void *)にキャストすることがよく推奨されます: printf("%p", (void *)ptr);
アスタリスクの前にあるデータ型は、ポインタが指すデータの種類を指定していることに注目してください。データ型によって占有するメモリ容量が異なり、コンパイラが適切なメモリ管理を行うためにこの情報を必要とするため、これは重要です。
チャレンジ
簡単NULLで初期化されたint_ptrという名前のintへのポインタを宣言するNULLで初期化されたchar_ptrという名前のcharへのポインタを宣言するNULLで初期化されたfloat_ptrという名前のfloatへのポインタを宣言する%pフォーマット指定子を付けたprintfを使用して、各ポインタに格納されているメモリ領域のaddressを出力する。出力の際は、正しいフォーマットを保証するためにポインタを(void*)にキャストしてください。例:printf("Label: %p\n", (void*)ptr);
出力は、以下のフォーマットで3つのポインタの address を表示する必要があります。
Integer pointer: [address]
Character pointer: [address]
Float pointer: [address]実際のメモリ領域の address は変動しますが、フォーマットとラベルは上に示されている通りに正確に一致させる必要があります。
自分で試してみよう
#include <stdio.h>
int main() {
// TODO: ここにポインタを宣言してください
// TODO: 指定された形式でポインタのアドレスを出力してください
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。