Как узнать конец массива 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 книги. Жаль, что я не могу дать вам номер страницы, но вы узнаете его, когда увидите.