Как узнать конец массива int*?

Я делаю динамический массив с int* тип данных с помощью malloc(). Но проблема в том, как узнать конец массива?

нет эквивалента на int* тип данных, Итак, как это сделать? Посадочный размер в качестве параметра функции?

5 ответов


C не управляет длиной массива, как это делают некоторые другие языки.

вы можете рассмотреть структуру для этого:

typedef struct t_thing {
  int* things;
  size_t count;
} t_thing;

используется:

t_thing t = { (int*)malloc(sizeof(int) * n), n };

нет" официального " эквивалента для целых чисел, но вы можете использовать свое собственное значение. Например, если ваши целые числа представляют расстояния, вы можете использовать -1 (недопустимое расстояние) в качестве значения sentinel для указания конца массива.

Если ваш целочисленный массив может разумно содержать любой int value, затем вы можете передать размер выделенного массива с дополнительным параметром вашей функции.


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


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


когда u выделяет память с помощью malloc, количество выделенных байтов сохраняется непосредственно перед началом "malloc" памяти. если вы знаете размер, вы знаете как хорошо! Это объясняется в Библии C, K&R книги. Жаль, что я не могу дать вам номер страницы, но вы узнаете его, когда увидите.