ポインタについて


C++初心者です。  
今までJava主体だったので、参照関係の知識は最低限(プリミティブかそうでないか)程度の認識しかありませんでした。  
PHPも少し触っていたので参照はわかりますが、ポインタがどうも理解しきれません。

参照 = 変数のアドレス  
ポインタ = 変数のアドレスの値、つまり参照の値ということでいいんでしょうか？

また、上と仮定した時、ダブルポインタが配列になる意味が納得できません。  
listとか、vectorのポインタはどうなるんですか？  
char **argv がcharの連想配列、  
char *argv[]がchar配列の配列 = stringの配列  
となるのであれば、  
list *arrayは「string型リスト」の配列にはなりませんよね？  
charはプリミティブだから扱いが違うという話なんでしょうか？




`char *argv[]` は、`char *` の配列を意味します（関数の引数の場合実際はポインタ(`char**argv`)）。「char
配列の配列」ではありません。  
`char **argv` は、`char *` へのポインタを意味します。「charの連想配列」ではありません。  
`argv`が`char *`の配列の最初を要素を指している時、  
配列のそれぞれの要素（つまりchar へのポインタ）を`argv[インデックス]`でアクセスできるという意味で同じです。

ポインタは単純に最初の要素を指していて`[ ]`演算によって配列と同じようにアクセスできます。  
もちろんその場合要素は並びになっている必要があります。




`char *argv[]` は、`char *` の配列を意味します（関数の引数の場合実際はポインタ(`char**argv`)）。「char
配列の配列」ではありません。  
`char **argv` は、`char *` へのポインタを意味します。「charの連想配列」ではありません。  
`argv`が`char *`の配列の最初を要素を指している時、  
配列のそれぞれの要素（つまりchar へのポインタ）を`argv[インデックス]`でアクセスできるという意味で同じです。

ポインタは単純に最初の要素を指していて`[ ]`演算によって配列と同じようにアクセスできます。  
もちろんその場合要素は並びになっている必要があります。

