🔰
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