かずまさん
詳細に解説頂きありがとうございます.
配列とポインタは同じものではなかったのですね.
ロベール本では同じものであるように解説されていましたので,
勘違いしていました.
かずまさんの回答に関して何点かお伺いしたいことがございます.
【疑問点1】
かずま さんが書きました:
&buff1 は、配列全体(10バイトの領域)へのポインタ
&buff2 は、ポインタ buff2 へのポインタ(10バイトの領域へのポインタではない)
上記に関して,配列全体へのポインタとはint型のポインタのような感じでしょうか?
int型のポインタとは以下のようなものをイメージしています.
コード:
int a=10;
int * ptr_a=&a;
int型のポインタは32バイトの領域のブロックを指していると思います.
同じようにbuff1はmallocで10バイトの領域のブロックが取られたものであるので,
新しく10バイトの型が作られたのだという理解でいいでしょうか?
【疑問点2】
かずま さんが書きました:
ポインタは配列を指す場合もありますが、
単独の変数を指す場合もあります。
後者の場合、要素は存在しません。
前者の場合、配列を指しているのだから
その配列の要素は存在します。
上記に関しては,以下のような感じでしょうか?
ポインタptr_aは単独の変数を指しているかと思います.
*ptr_aとすると,要素である10が取得出来ます.
しかし,この10という値はポインタの要素ではないということでしょうか?
コード:
int a=10;
int * ptr_a=&a;
【補足】
かずま さんが書きました:
配列の要素は連続しています。
char buff1[10], buff2[20]; のように
2つの配列があった時、それらが連続して
いるかどうかは不明です。
上記に関してですが,私の説明が悪く誤解を与えてしまったようです.
配列の要素とは,buff1[0],buff1[1]のようなものの事を指していました.
buff2,buff2+1といったポインタは連続したメモリ領域が取られると思いますが,
buff[0]とbuff[1]に関しては連続しているとは限らないという趣旨のないようでした.
配列はブロックスコープで解放されるのですね.
mallocで確保したメモリ領域はfreeしない限り解放されないということは知りませんでした.
(プログラムの終了でやっと解放される)
疑問点に関して回答頂ければ幸いです.
よろしくお願いいたします.