ポインタと参照
基本定義
- ポインタ: オブジェクトのアドレスを格納する変数。自身のメモリアドレスを持つ。
- 参照: 変数の別名。宣言時に初期化必須。
相違点
| 特性 | ポインタ | 参照 |
| 多重間接参照 | サポート (例: int**) | 単一参照のみ |
| null許容 | NULL/nullptr可 | 不可 |
| 初期化 | 宣言と初期化を分離可 | 宣言時必須 |
| 再代入 | 対象変更可 | 不可 |
| sizeof演算 | ポインタサイズを返す(4/8byte) | 参照先サイズを返す |
| 引数渡し | アドレス値のコピー | エイリアス渡し |
実装例
int value = 10;
int* ptr_val = &value; // ポインタ
int& ref_val = value; // 参照
*ptr_val = 20; // ポインタ経由で変更
ref_val = 30; // 参照経由で変更
ptr_val = nullptr; // ポインタはnull可能
const修飾子
基本動作
- const変数は読み取り専用。定義時初期化必須
- データ保護と誤変更防止
定数ポインタ(下位const)
int data = 10;
const int* cptr = &data; // 定数ポインタ
// cptr = 9; // エラー: 値変更不可
data = 9; // 直接変更は可能
ポインタ定数(上位const)
int data = 10;
int* const const_ptr = &data;
// const_ptr = &new_data; // エラー: ポインタ変更不可
*const_ptr = 9; // 値変更は可能
#defineとtypedef
#defineマクロ
#define CIRCLE_RATIO 3.14159
#define MAX_VAL(a, b) ((a) > (b) ? (a) : (b))
typedef型定義
typedef unsigned int UINT;
typedef struct { int x; int y; } Coord;
比較
| 特性 | #define | typedef |
| 処理段階 | プリプロセス | コンパイル |
| 型検査 | 無し | 有り |
| スコープ | ファイル単位 | 通常スコープ |
#defineとinline
#define SQUARE(x) (x) * (x) // マクロ
inline int sqr(int x) { return x * x; } // インライン関数
overrideとoverload
| 特性 | override | overload |
| 多態性 | 実行時多態 | コンパイル時多態 |
| スコープ | 継承関係 | 同一スコープ |
newとmalloc
| 特性 | new/delete | malloc/free |
| メモリ確保 | 型サイズ自動計算 | 明示的サイズ指定 |
| コンストラクタ | 自動呼び出し | 呼び出さない |
constexprとconst
constexpr int MAX_LEN = 100; // コンパイル時定数
const int dyn_val = getValue(); // 実行時定数
volatile
volatile int sensor_data; // 最適化無効化
extern
extern int global_count; // 外部変数宣言
static
class Counter {
static int total; // クラス共有変数
};
int Counter::total = 0;