• ベストアンサー

関数へのポインタ渡しでの配列の初期化について

はじめまして、C言語の基本的な質問をさせてください。 C言語で、外部関数へポインタで引数を渡す場合に、 関数に渡されるのはアドレスですよね? で、渡された関数側でそのポインタの配列の初期化を するときにはアドレスだけの情報だと、要素数がいくつ あるか分からず、領域の破壊をしてしまいそうな気が するのですが?いかがでしょうか? また、関数かなんかで、配列の要素数が分かる関数が あったような気がするのですが、それもアドレスだけ でわかるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

疑問に思っていらっしゃる通りです。 渡された関数側では、要素数がいくつあるかわかりません。 初期化をするならば、ポインタと一緒に、要素数の情報も渡してやる必要があります。 配列の要素数がわかる関数はありません。 マクロ(プリプロセッサ)で、配列要素数を計算するのは可能ですが、 これは使用場所が限定されています。 配列を宣言したすぐ近くでないと役に立ちません。 渡された関数側では使えません。 C言語では、配列はその要素数とともに扱う必要があり、 そこをうっかりするとバグが発生する危険があります。

H-hirosawa
質問者

お礼

早速の回答ありがとうございます。 やはりそうですよね? ヘッダでインクルードしてある構造体の配列などなら 初期化することは可能だと思いますが、通常の配列だと 引数として要素数をわたしてやる必要がありますね。 ありがとうございました。

関連するQ&A

専門家に質問してみよう