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

问题描述 投票:0回答:4

我想知道是否有任何方法可以在红宝石中获取像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));
  }

它有效,但我想要一个更优雅的方式来做到这一点。

c arrays
4个回答
3
投票

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

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

不是很优雅吗?

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


2
投票

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


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)?


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);
   ...
}
© www.soinside.com 2019 - 2024. All rights reserved.