我有一组无符号长多数。我初始化前12个元素。该数组在整个程序运行时更改大小。如何找出数组的长度。
我不能使用sizeof(array)/ sizeof(unsigned long long),因为在这种情况下它无法正常工作。
我尝试使用这个循环:
count = 0;
while ( array[count] ) count++;
return count;
此方法的问题在于它仍然返回错误的长度。
以下是代码的基本概要。
unsigned long long *prime = (unsigned long long *)calloc(1000, sizeof(unsigned long long);
prime[0] = 3;
prime[1] = 5;
....
prime[11] = 41;
unsigned long long *ptrEmpty = &prime[12];
int sizeComp;
//User can change change the size of the array here to create a larger list of primes.//
for( i = 43, sizeComp = 12; sizeComp < length(prime); i += 2 ){
// Do stuff...
}
我怎样才能找到这个长度?
答案 0 :(得分:5)
一种方法是每次将元素插入数组时都保留一个计数器。也许你可以将数组封装在一个结构中,例如:
typedef struct int_arr
{
int* arr_ptr;
size_t max_size;
int curr_elem;
} int_arr;
然后,您可以指定init
,add
以及get_max_size
和get_curr_size
函数。
初始化:
int_arr* arr_init(int_arr* ptr, size_t size)
{
ptr = calloc(size, sizeof(int);
ptr->max_size = size;
ptr->curr_elem = 0;
return ptr;
}
添加:
void add(int_arr* ptr, int value)
{
if (ptr->curr_elem < ptr->max_size)
ptr->arr_ptr[ptr->curr_elem++] = value;
else
printf("Max size reached!\n");
}
获取总大小:
size_t get_total_size(int_arr* ptr) { return ptr->max_size; }
获取当前大小:
int get_curr_size(int_arr* ptr) { return ptr->curr_elem; }
显然用您想要的类型替换int
。