有没有办法在C中获取数组中的元素数量?

时间:2012-07-23 12:09:01

标签: c arrays

我想知道是否有任何方法可以在ruby中获取像Array#size这样的数组中的元素数量,所以我想出

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 个答案:

答案 0 :(得分:3)

好吧,你可以使用这个宏。

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

不是很优雅吗?

(当然,它不适用于动态数组)

答案 1 :(得分:2)

不,没有简单的方法来计算C 中数组中的元素数量,除非提供自己的分隔符值来指示数组的结尾(类似于{{1}的方式在字符串中使用。)

答案 2 :(得分:1)

也可能有比这更优雅的解决方案。

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

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

另外看看: How to find the 'sizeof' (a pointer pointing to an array)?

答案 3 :(得分: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);
   ...
}