0

Array#sizeruby のように配列の要素数を取得する方法はないかと考えたので、

int a;
int ary[] = {1,2,3,4,5,6};
int number_of_elements =sizeof(ary)/sizeof(a);
for(index = 0;index < number_of_element);index++){
    printf("the %d element of array is %d",index,*(ptr + index));
  }

それは機能しますが、これを行うためのよりエレガントな方法が必要です。

4

4 に答える 4

3

さて、このマクロを使用できます。

#define N_ELEM(t) (sizeof(t) / sizeof(*t))

エレガントですね。

(もちろん、動的配列では動作しません)

于 2012-07-23T12:10:27.340 に答える
2

いいえ、配列の終わりを示す独自の区切り値を指定しない限り'\0'、C で配列内の要素の数をカウントする簡単な方法はありません (文字列での の使用方法と同様です)。

于 2012-07-23T12:10:15.110 に答える
1

これよりもエレガントな解決策があるかもしれません。

#define number_of_elements sizeof(arr)/sizeof(arr[0])

また

const int number_of_elements = sizeof(arr)/sizeof(arr[0])

また、次も参照してください: 'sizeof'(配列を指すポインター)を見つける方法は?

于 2012-07-23T12:20:30.100 に答える
1

エレガントで簡単な方法はなく、sizeofトリックにも限界があります。配列式が関数に渡されると、関数が受け取るのは配列ではなくポインター値です。だから何か

void foo(int a[])
{
  size_t count = sizeof a / sizeof a[0];
  ...
}

関数パラメーター宣言のコンテキストでは動作しT a[]ませT a[N]T *a。配列ではなくポインター値であるため、ポインターのサイズを最初の要素のサイズで割った値が得られますがaこれ必要intなものではありません。

基本的に、配列のサイズを自分で追跡する必要があります。作成時にその大きさがわかっているので、その情報を保存して配列で渡す必要があります。

void foo(int *a, size_t asize)
{
   ...
}

int main(void)
{
   int arr[SOME_SIZE];
   ...
   foo(arr, SOME_SIZE);
   ...
}
于 2012-07-23T14:01:50.043 に答える