[sng_toc_insert]
具体的に理解するため、char *argv[3]としてメモ。
もくじ
読み解き方:
Step 1: 基本要素を分解
char
= 文字型*
= ポインタargv
= 変数名[3]
= 配列(要素数3)
Step 2: 結合の優先順位
argv[3]
が先に結合 →argv
は配列char *
が後に結合 → 各要素はchar
へのポインタ
Step 3: 完全な意味
「char
型へのポインタを3つ格納できる配列」
実際の中身:
各要素へのアクセス:
表記 | 型 | 意味 |
---|---|---|
argv | char *[3] | 配列全体 |
argv[0] | char * | "./program" の先頭アドレス |
argv[1] | char * | "abc" の先頭アドレス |
argv[2] | char * | "def" の先頭アドレス |
読み方のコツ:
右から左に読む:
argv[3]
→ 「argvは3つの要素を持つ配列」char *
→ 「各要素はcharへのポインタ」
つまり「文字列を3つ格納できる配列」。
char *argv[]の場合
読み解き方:
Step 1: 基本要素を分解
char
= 文字型*
= ポインタargv
= 変数名[]
= 配列(サイズ未指定)
Step 2: 結合の優先順位
argv[]
が先に結合 →argv
は配列char *
が後に結合 → 各要素はchar
へのポインタ
Step 3: 完全な意味
「char
型へのポインタを格納する配列(サイズは実行時に決まる)」
[]
と[3]
の違い:
宣言 | 意味 |
---|---|
char *argv[3] | 固定サイズ(3つ)の配列 |
char *argv[] | 可変サイズの配列 |
実際の動作
読み方のコツ:右から左に読む
argv[]
→ 「argvは配列」char *
→ 「各要素はcharへのポインタ(文字列)」
つまり「文字列を格納する配列(個数は実行時に決まる)」。
引数の個数が変わっても対応できる柔軟な配列。