我有一个固定大小的数组C
。在那里我可能有任何数量(小于数组大小)的有用元素。现在我只需要我有用的元素。所以我正在考虑使用end of array
整数数组的标记。首先
a) 这可能吗?
b) 如果可能,怎么做?
我有一个固定大小的数组C
。在那里我可能有任何数量(小于数组大小)的有用元素。现在我只需要我有用的元素。所以我正在考虑使用end of array
整数数组的标记。首先
a) 这可能吗?
b) 如果可能,怎么做?
我会采取稍微不同的方法
struct IntArray
{
int data[N];
int size; // <-- use this to keep track of the size.
}
从逻辑上讲,如果您可以找到可以充当 END_OF_ARRAY 的唯一整数,并且不会出现在您的有用数字集中...
您只需要在末尾显式添加它...并稍后检查将指示结束的数字
这取决于它是一个数组以及哪些值是有效的。
您说您有一个 int 数组,请使用对列表无效的任何值。如果所有条目都是正数,则使用负数作为结尾。如果这些值都低于 INT_MAX,则将其用作结束标记。
您始终可以将数组视为缓冲区并跟踪当前有用元素的数量。
struct buffer
{
int* array;
size_t size;
}
是的,创建一个名为end_of_array_marker
.
它需要比这更复杂吗?
有两种方法可以做到这一点(如果 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