🔰

C++ポインタ超入門

に公開

知人がC++のポインタでつまずいていたので作った資料。


📘 C++ポインタ超入門

—「*が意味不明…」を完全に解消するガイド—


🧭 この本の目的

  • C++初心者がつまずく「ポインタとは何か?」
  • 特に混乱の元「*の2つの使い方」
  • 図とコードで、直感で理解できるようになる

✅ 1. ポインタってなに?

一言で言うと:
「他の変数の住所(アドレス)を記憶するための変数」


🌱 例:

int x = 10;
int* p = &x;
  • x … 普通の変数、値 10 を持つ
  • &x … x のアドレス(=メモリ上の住所)
  • int* p … x のアドレスを保存するポインタ型変数 p

🏠 ポインタを家と住所で例えると…

用語 意味 例えるなら
x 値を持つ変数 「家」
&x その住所 「住所メモ」
int* p = &x; 住所を覚えたポインタ 「pくんはxの住所を知ってる」
*p = 20; 指している家に荷物を入れる 「xの中身を書き換えた」

🚨 2. * が混乱の元!なぜ2種類あるの?

🔻 結論だけ先に:

文脈 意味 例
宣言時 「これはポインタ型ですよ」 int* p = &x;
式の中 「ポインタが指す中身を見ます」 *p = 10;

📊 3. 視覚で理解


✍️ 4. 実際のコードで確認しよう

#include <iostream>

int main() {
    int x = 5;
    int* p = &x;    // ← 型宣言の `*`
    *p = 10;        // ← 中身アクセスの `*`

    std::cout << x << std::endl;  // 結果は「10」
    return 0;
}

📌 5. よくある誤解まとめ

誤解 解説
* はいつも「掛け算」 ❌ 文脈次第。宣言 or 参照で意味が変わる
int p = &x; はOK? ❌ 型が違う(intにint*は代入できない)
int *p, q; は両方ポインタ? ❌ p はポインタ、q は普通のint変数

🧠 6. 完全理解フレーズ(暗記用)

  • int* p = &x; → 「pは“住所を入れる箱”」
  • *p = 20; → 「pが指す“中身”を書き換え」

🧪 7. 理解度チェックドリル

Q1

int a = 3;
int* px = &a;
*px = 7;
std::cout << a << std::endl;

出力は? → 7


Q2

int a = 1;
int* p = &a;
int b = *p;
b = 99;
std::cout << a << std::endl;

出力は? → 1(コピーなので a は変わらない)


Q3

int a = 10;
int* p = &a;
int** pp = &p;
**pp = 123;
std::cout << a << std::endl;

出力は? → 123


🎁 8. 最後にまとめチートシート

int x = 5;
int* p = &x;  // ← 宣言の *
*p = 10;      // ← 参照の *
書き方 読み方
&x 「xの住所」
*p 「pが指す中身」
int* p 「int型の住所を入れる箱」

✅ これさえ分かれば次に進める

  • ポインタと配列はどう違う?
  • 関数に渡すときどう使う?
  • new と delete は?
  • nullptr とは?
  • int&(参照)との違いは?

Discussion