Как найти размер целочисленного массива - PullRequest
25 голосов
/ 05 мая 2010

Как найти размер целочисленного массива в C.

Любой метод, доступный без обхода всего массива один раз, для определения размера массива.

Ответы [ 4 ]

80 голосов
/ 05 мая 2010

Если массив является глобальной, статической или автоматической переменной (int array[10];), то sizeof(array)/sizeof(array[0]) работает.

Если это динамически размещаемый массив (int* array = malloc(sizeof(int)*10);) или переданный в качестве аргумента функции (void f(int array[])), то вы не сможете найти его размер во время выполнения. Вам придется где-то хранить размер.
Обратите внимание, что sizeof(array)/sizeof(array[0]) прекрасно компилируется даже для второго случая, но он будет молча давать неверный результат.

4 голосов
/ 05 мая 2010

Если массив статически размещен:

size_t size = sizeof(arr) / sizeof(int);

если массив выделяется динамически (куча):

int *arr = malloc(sizeof(int) * size);

где переменный размер - это размерность обр.

3 голосов
/ 08 июля 2013

_msize(array) в Windows или malloc_usable_size(array) в Linux должны работать для динамического массива

Оба находятся в malloc.h и оба возвращают size_t

0 голосов
/ 05 мая 2010
int len=sizeof(array)/sizeof(int);

Должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...