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

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

于 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 回答