- ベストアンサー
&a[0]とa[10]の違いについて
char a[10];と宣言されている時に、関数への引数として、&a[0]とする場合とa[10]とする場合でどこが違ってくるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> (しかもa[9]にはNULLがはいるし) NULLとは'\0'のことですか? もしそうだとして、配列の最終要素に必ず'\0'が入るという 保証はどこにもありません。 その配列を関数の外部で定義していたり、関数の内部でstatic付きで 定義していたりすれば、最終要素を含めて全要素に'\0'が入ります。 それ以外の場合、a[0]~a[9]には何が入っているかわかりません。いわゆる「ゴミ」が入っている状態です。
その他の回答 (2)
- asuncion
- ベストアンサー率33% (2127/6289)
例えば、 void func(char *s) { /* 何かの処理 */ } のようなfunc()があるとします。 お聞きになりたいのは、main()などからfunc()を呼び出す場合の 引数の書き方についてですか?だとすると、 func(&a[0]); と書くと、func()には、配列aの先頭要素のアドレスが渡ります。func(a); と書いても同じです。 func(a[10]); と書くと、func()には、配列aの10番目の要素を渡そうとします。func()が想定している引数とは型が異なります。 また、配列aは[10]と定義しているため、a[10]は定義範囲外の領域です。
- ilice
- ベストアンサー率50% (3/6)
&a[0]を送るのとa[10]を送るのではぜんぜん違います。 &a[0]の場合、a[0]のアドレスを送ります。 a[10]の場合、a[10]の中の値を送ります。 &a[0]を送った時、a[10]を参照するにはa[10]のアドレスまで移動しなければいけません。 a[10]を送った時、a[10]の中の値だけを渡すので送り先の関数から再びa[10]の中身を参照することは出来ません。 アドレスを渡すのと値を渡すのとでは全然ちがうと思いますよ。 そもそも char a[10]; という宣言ではa[0]~a[9]しか使えないと思いますよ。 (しかもa[9]にはNULLがはいるし)