1

我有一个无符号长长数字数组。我初始化了前 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...
} 

我怎样才能找到这个长度?

4

1 回答 1

5

一种方法是在每次将元素插入数组时保留一个计数器。也许您可以将数组封装在一个结构中,例如:

typedef struct int_arr
{
    int* arr_ptr;
    size_t max_size;
    int curr_elem;
} int_arr;

然后您可以指定init,addget_max_sizeget_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为您想要的类型。

于 2013-06-07T01:58:33.490 回答