2012-06-26 3 views
0

У меня есть массив фиксированного размера в C. Там у меня может быть любое число (меньше размера массива) полезного элемента. Теперь мне нужен только мой полезный элемент. Поэтому я думаю использовать маркер end of array для целочисленного массива. Прежде всегопредложение для маркера целочисленного массива


a) Возможно ли это?

b) Если возможно, как?

+0

Невозможно. Представьте, что происходит, когда весь массив имеет полезные элементы ... для маркера нет места. Используйте вспомогательную переменную с количеством элементов. – pmg

+0

@pmg Ну, если вы думаете о строках, то они массивы, и у них есть конец строкового маркера (null '\ 0'). Все, что вам нужно сделать, это создать массив, размер которого на один слот больше, чем требуемые элементы. –

+0

@ nadirs: вы правы. Если OP может использовать определенное значение для маркера (например: '0',' 42', '-8888',' INT_MAX', 'INT_MIN'), это возможно. – pmg

ответ

3

Я бы немного другой подход

struct IntArray 
{ 
    int data[N]; 
    int size; // <-- use this to keep track of the size. 
} 
1

Вы всегда можете рассматривать ваш массив как буфер и отслеживать текущее количество полезных элементов.

struct buffer 
{ 
    int* array; 
    size_t size; 
} 
+1

Вот такой подход я бы рекомендовал. – Wernsey

0

Да, создайте целочисленную переменную под названием end_of_array_marker.

Нужно ли быть более сложным, чем это?

+0

Я не думаю, что вы поняли вопрос ... – Nim

+0

Я часто не понимаю здесь вопросов. Я пашу независимо. –

2

Это зависит от того, что он представляет собой массив и какие значения являются действительными.

Вы говорите, что у вас есть массив int, используйте любое значение, недопустимое для списка. Если все записи положительны, используйте отрицательное число для конца. Если значения находятся под INT_MAX, используйте это как конечный маркер.

3

Логически это возможно, если вы можете найти уникальное целое число, которое может выступать в качестве END_OF_ARRAY, и там не будет в вашем наборе полезного числа ...

вам просто нужно, чтобы добавить его в явном виде в конце. .. и проверьте номер позже, который укажет конец

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 
Смежные вопросы