- ベストアンサー
配列の要素数を取得する方法とは?
- C言語で配列の要素数を取得する方法はありますか?標準の関数を見ても、配列のポインタを渡しているものは見かけません。要素数が不明な場合、配列の要素数も引数として一緒に渡す必要がありますか?作ってみたサンプルコードも利用して説明ください。
- 配列の要素数を取得する方法がありますか?C言語でプログラムを作成しており、配列の要素数を取得する方法が分からずに困っています。標準の関数を見ても、配列のポインタを渡しているものは見かけません。要素数が不明な場合、配列の要素数も引数として一緒に渡す必要がありますか?
- C言語で配列の要素数を取得する方法はありますか?標準の関数を見ても、配列のポインタを渡しているものは見かけません。要素数が不明な場合、配列の要素数も引数として一緒に渡す必要がありますか?作ってみたサンプルコードも利用して説明してください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Java では「配列はオブジェクト」で実行時にも自分の大きさを保持していますが, C/C++ では「配列の大きさ」はコンパイル時までしか保持されません. 実行時には「自分の大きさ」を知らないのでどうしようもないはずです.
その他の回答 (3)
- pick52
- ベストアンサー率35% (166/466)
与えられる引数の型がある程度決まっているなら配列はvoid*で渡して switchなどで型を分岐させるというのはどうでしょうか。 (要素数はやはり別途引数で渡す必要があります) 単なる思いつきで実際にやってもいないのでうまくいくかどうかも 分かりませんが(外していたらすみません)。
お礼
回答ありがとうございます。 要素数はやはり別に渡す必要がありそうですね。 なかなかうまくいかないものです。
- Tacosan
- ベストアンサー率23% (3656/15482)
標準関数で「配列のポインタを渡す」ものってあったっけ? C においては「何らかの形で『最後』の位置を与える」ことが必須だったはず. 方法としては ・要素数を与える (memcpy など) ・「最後」の要素のあとに「特殊」な値を入れる (str系) くらいかな. C++ なら参照と template でなんとでもなるんだけど....
お礼
回答ありがとうございます。 確かに要素数を与えるだけでなく、文字列などは特殊な値を終了として扱っていますね。 Java なら渡された配列から要素数を取得することができますが、Cだと難しいようですね。。。
- takoashi
- ベストアンサー率39% (21/53)
参考にした標準の関数がなにかわからないが、 適当でないものを参考にしてるかも。 > 配列の要素数も引数として一緒に渡す必要がありますか? 要素数を渡すのが一般的だと思います。 #ifndef _countof #define _countof(a) (sizeof(a)/sizeof((a)[0])) #endif void func(int *p, int size) { __for (i = 0; i < n; i++) { ____printf("%d\n", *(p+i) ); __} } int main(int argc, char *argv[]) { __int ary1[10] = { 2, 4, 6, 8, 0, 1, 3, 5, 7, 9 }; __int ary2[5] = { 3, 6, 9, 12, 15 }; __func(ary1, _countof(ary1)); __func(ary2, _countof(ary2)); __return 0; }
お礼
回答ありがとうございます。 私も要素数を一緒に渡すのが一般的だと思っています。 要素数を渡さないで、要素数を知ることが可能なのか調べています。
お礼
回答ありがとうございます。 やはりどうしようもないのですね。 素直に他の実装にならい、引数に要素数をつけることにします。 配列のポインタを使用している関数も見ないですし。