私たちがC言語で int score = 100; のように変数を宣言するとき、その score という変数はコンピュータのどこに、どのように保存されているのでしょうか?この謎を解く鍵が**「メモリ」と「アドレス」**です。
この記事では、プログラムの舞台裏で動いているメモリの役割と、変数がどのように管理されているのかを、実際のコードを通して探っていきます。
メモリとアドレスの役割
コンピュータにおけるメモリ(主記憶装置、RAM)は、プログラムやデータが一時的に置かれる**「作業スペース」**のようなものです。CPUが計算などを行う際、必要な情報をこのメモリから読み書きします。
この広大な作業スペースは、バイト単位で区切られた小さな箱がズラリと並んでいるイメージです。そして、それぞれの箱には「0x0001」「0x0002」といったように、場所を特定するためのユニークな番号が振られています。この番号がアドレスです。
変数とアドレスの関係
私たちがプログラムで int user_age; のように変数を宣言すると、C言語は以下のようなことを行います。
int型を格納するのに十分な大きさのメモリ領域(空いている箱)を探す。- その領域を
user_ageという名前で予約する。 user_age = 30;のように値が代入されると、予約した領域にその値を書き込む。
つまり、user_age という変数の名前は、私たちプログラマが分かりやすいように付けたラベルであり、コンピュータは内部的に「アドレス 0x7ffee... にあるデータ」という形で認識しています。
変数のアドレスを覗いてみよう
C言語では、& (アドレス演算子) を使うことで、変数が格納されているメモリアドレスを直接見ることができます。
以下のプログラムは、様々な型の変数を宣言し、それぞれの「値」「アドレス」「サイズ」を表示するものです。
#include <stdio.h>
int main(void) {
int user_age = 30;
char initial = 'A';
double price = 1980.50;
printf("--- 変数の値とアドレスを見てみよう ---\n\n");
// %p はポインタ(アドレス)を表示するための、現代的で正しい書式指定子です
printf("変数 user_age の情報\n");
printf(" 値: %d\n", user_age);
printf(" アドレス: %p\n", (void *)&user_age);
printf("\n");
printf("変数 initial の情報\n");
printf(" 値: %c\n", initial);
printf(" アドレス: %p\n", (void *)&initial);
printf("\n");
printf("変数 price の情報\n");
printf(" 値: %lf\n", price);
printf(" アドレス: %p\n", (void *)&price);
printf("\n");
printf("--- データ型ごとのサイズを見てみよう ---\n\n");
// sizeof演算子で、各データ型が何バイトのメモリを消費するか確認
printf("int 型のサイズ: %zu バイト\n", sizeof(int));
printf("char 型のサイズ: %zu バイト\n", sizeof(char));
printf("double 型のサイズ: %zu バイト\n", sizeof(double));
return 0;
}
実行結果(アドレスは環境により毎回異なります):
--- 変数の値とアドレスを見てみよう ---
変数 user_age の情報
値: 30
アドレス: 0x7ffee2a1aabc
変数 initial の情報
値: A
アドレス: 0x7ffee2a1aabf
変数 price の情報
値: 1980.500000
アドレス: 0x7ffee2a1aab0
--- データ型ごとのサイズを見てみよう ---
int 型のサイズ: 4 バイト
char 型のサイズ: 1 バイト
double 型のサイズ: 8 バイト
結果からわかること
- 各変数が異なるアドレスを持つ:
user_age,initial,priceは、それぞれメモリ上の別々の場所に格納されていることがわかります。 - データ型によってサイズが違う:
sizeofの結果から、double型は8バイトの大きな領域を、char型は1バイトの小さな領域しか必要としないことがわかります。変数を宣言すると、このサイズ分のメモリが確保されるのです。
まとめ
- プログラムが使うデータは、メモリという作業スペースに一時的に保存される。
- メモリ上の各場所には、アドレスというユニークな番号が付いている。
- 変数を宣言すると、そのデータ型に必要なサイズのメモリ領域が確保され、変数名とアドレスが結びつけられる。
&演算子を使うと、変数のアドレスを知ることができる。
このメモリとアドレスの概念は、C言語の強力な機能である「ポインタ」を理解するための基礎となります。変数を宣言するとき、その裏側で何が起きているのかをイメージできるようになることが、C言語マスターへの第一歩です。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
