我想知道是否有任何方法可以在红宝石中获取像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));
}
它有效,但我想要一个更优雅的方式来做到这一点。
好吧,你可以使用这个宏。
#define N_ELEM(t) (sizeof(t) / sizeof(*t))
不是很优雅吗?
(当然,它不适用于动态数组)
不,没有简单的方法来计算C中数组中的元素数量,除非您提供自己的分隔符值来指示数组的结尾(类似于'\0'
在字符串中的使用方式。)
可能还有比这更优雅的解决方案。
#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)?
没有优雅或简单的方法,即使是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);
...
}