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