0

我有一个固定大小的数组C。在那里我可能有任何数量(小于数组大小)的有用元素。现在我只需要我有用的元素。所以我正在考虑使用end of array整数数组的标记。首先


a) 这可能吗?

b) 如果可能,怎么做?

4

6 回答 6

3

我会采取稍微不同的方法

struct IntArray
{
  int data[N];
  int size; // <-- use this to keep track of the size.
}
于 2012-06-26T09:38:38.337 回答
3

从逻辑上讲,如果您可以找到可以充当 END_OF_ARRAY 的唯一整数,并且不会出现在您的有用数字集中...

您只需要在末尾显式添加它...并稍后检查将指示结束的数字

于 2012-06-26T09:39:57.650 回答
2

这取决于它是一个数组以及哪些值是有效的。

您说您有一个 int 数组,请使用对列表无效的任何值。如果所有条目都是正数,则使用负数作为结尾。如果这些值都低于 INT_MAX,则将其用作结束标记。

于 2012-06-26T09:39:28.567 回答
1

您始终可以将数组视为缓冲区并跟踪当前有用元素的数量。

struct buffer 
{ 
     int* array;
     size_t size;
}
于 2012-06-26T09:37:57.650 回答
0

是的,创建一个名为end_of_array_marker.

它需要比这更复杂吗?

于 2012-06-26T09:38:09.053 回答
0

有两种方法可以做到这一点(如果 int 值可以具有任何可能的 int 值)。


第一个选项:存储数组中元素的数量,如果添加/删除项目,则增加值。

int count;
int *array;

第二种选择:使用指向数组中下一个变量的指针创建一个结构。如果它NULL你已经到达你的列表的末尾。

struct Item {
    int i;
    struct Item *next;
}
// pointing at the start adress:
struct Item *start = NULL;
// adding first item:
start = malloc(sizeof(struct Item));
start->i = 123;
start->next = NULL // mark the current end of list (not needed if you add a value right after the first)
// adding second item:
start->next = malloc(sizeof(struct Item));
start->next->i = 456;
start->next->next = NULL
// etc
于 2012-06-26T15:55:58.380 回答