- 締切済み
配列とポインタ
配列とポインタの違いを教えて下さい。 後 char str[100]; と const char *strはどこが違いますか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- myun2
- ベストアンサー率0% (0/2)
このことを理解するには、ある程度ポインタと言うものについてちゃんと分かっている必要があります。 質問者の方がある程度ポインタについて理解があるものとして回答します。 ---------------------- 配列もポインタも本質的には同じものです。 「char str[100];」も「const char *str」も、どちらも「str」と言うポインタです。 では何が違うのか。 ポインタと言うものが、”箱(変数)を指し示すもの”であると言う事は分かりますよね? どちらのstrも「箱(変数)を指し示す」という点では全く同じです。 ただし、「char str[100];」のような配列宣言の場合には、既にchar型の箱が100個用意されていて、ポインタstrは予めその100個の箱の先頭を指し示している状態です。 「const char *str」の場合にはまだどこの箱も指し示していない状態で 「str = hoge;」のようにする事によって、初めてどこかの箱を指し示すようになります。
- akayoroshi
- ベストアンサー率50% (46/91)
char str[100]; と char * const str = (char *) malloc(100); とでは、strが、ほぼ同じように使えます。( 違いは、sizeof str の値が異なることくらいです。) const char * str は、strが指している場所の値を変えることはできません。それに対して、char * const strは、ポインタ変数strの値を変えられなくなります。
- nshinpei
- ベストアンサー率100% (2/2)
ども。 配列は連続したメモリ領域。 ポインタは特定のメモリアドレスを指すものです。 char str[100]なら、char型、つまり1バイトのメモリが連続して100個とられます。 const char *ptrならchar型のメモリ領域をさすconstなポインタになります。 ptrが指す場所がcharの配列として確保されていれば、*ptrはptrがさしている一文字になります。 なぜ混同するかというと、配列array[100]とあったとき、配列名arrayはarrayの先頭を指すポインタであるという定義があるからです。 ポインタと配列は本質的にちがいますが、使い方によってはまったくおなじようにみえますね。
- Tacosan
- ベストアンサー率23% (3656/15482)
配列とポインタは本質的に全くの別物です. ただ, 多くの場合で「配列名」だけを書くと「当該配列の先頭要素へのポインタ」に勝手に変換されたり, 配列とポインタでアクセスに同じ方法が使えるので「同じように見える」だけです. でも, この辺の扱いは B の方が (メモリは使うけど) 上手だと思う. 時々, 「配列だけ B の仕様になっている C」が欲しいと思うことがある.
- titokani
- ベストアンサー率19% (341/1726)
まったく違うものです。 同じところを探すほうが難しいくらいです。 ただし、配列からポインタに暗黙の変換が行われることがあるので、そこが要注意です。