引数で指定された配列の要素数の取得
どうもこんにちは。
C言語でプログラムを作成しています。
ある関数に配列を渡すことを考えていますが、渡した配列の要素数を取得する方法は何かありますか?
標準の関数を見ても、配列の先頭アドレスのポインタとともに、配列の要素数を渡しているものばかりで、配列のポインタを渡しているものは見かけません。
要素数があらかじめわかっていれば、それを引数の型に指定できますが、呼び出されるまで不明な場合はうまくいきません。
配列の要素数も引数として一緒に渡す必要がありますか?
[作ってみたサンプル]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// func1 と func2 をまとめられないだろうか。。。
void func1(int (*p)[10])
{
________int n = sizeof(*p) / sizeof((*p)[0]);
________int i;
________for (i = 0; i < n; i++) {
________________printf("%d\n", (*p)[i]);
________}
________printf("\n");
}
void func2(int (*p)[5])
{
________int n = sizeof(*p) / sizeof((*p)[0]);
________int i;
________for (i = 0; i < n; i++) {
________________printf("%d\n", (*p)[i]);
________}
________printf("\n");
}
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 };
________func1(&ary1);
________func2(&ary2);
________return 0;
}
お礼
遅れてすいません あれからいろいろ試してやりましたが 結局Vectorにしてやりました。 処理的には Vectorに要素を付け足していって 要素数だけループして intValueして演算して、書き換え。 条件に達したらその要素から取り除くという感じです。 なんか面倒くさいなぁー という感想を持ちました...
補足
回答ありがとうございます。 Vectorを使うと返ってくる値がintじゃないみたいで面倒なんです・・・