- 締切済み
'.GetSize' : 左側がクラス、構造体、共用体ではありません。
int nData[10]; と配列作ったとき、要素数が10個っていうのを取り出すには どうすれば良いでしょう? int x=nData.GetSize(); //タイトルのようにエラーとなります。 x=Sizeof(nData)/4; //intなので4byteで割った・・・。あはは。 基本的な事柄でスミマセンが出てきません。宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
正確には、 size_t x = sizeof nData / sizeof nData[0]; ですね。 C++であれば、 template <typename T, std::size_t N> std::size_t lengthof(T (&array)[N]) { return sizeof array / sizeof(T); } という関数を作っておくと便利でしょう。 Cの場合、類似のマクロを作ることもできますが、配列ではなく(間違って)ポインタを渡してしまってもコンパイルエラーにできないので、あまり安全とはいえません。 一応参考までに書いておくと、 #define lengthof(array) (sizeof(array) / sizeof(array)[0]) といった感じです。
- osamuy
- ベストアンサー率42% (1231/2878)
int n = (sizeof nData) / sizeof nData[0];
お礼
ありがとうございます。
- sha-girl
- ベストアンサー率52% (430/816)
x=Sizeof(nData)/sizeof(int); で良いかと思います。 しかし10という値は自分で設定しているわけですから #define ARRAY_SIZE 10 int nData[ARRAY_SIZE]; としておけば、 x = ARRAY_SIZE; でいいはずです。 javaの配列なんかだと.lengthで要素数がとれますが cの配列はそんなことは出来ません。
お礼
的確なご回答ありがとうございます。 そうですよね。最初に定義しときゃ、後で変更するとき その部分だけ変えれば、済むんですよね・・・。
お礼
CARRAYって宣言してGetSizeでとってこれるから簡単ジャンと思ってたら 配列だと「'.GetSize' : 左側がクラス、構造体、共用体ではありません。」 ありゃ? と右往左往しておりました。 全体のサイズを一個目のサイズで割ってあげればよかったんですね。 いろんな書き方があるんですね。勉強になります。