2010-10-04 2 views
5

Как это сделать? ну, я хочу проверить, нет ли массиваПроверьте, не является ли массив C++ Null

+2

Как ваш массив для проверки объявлен? Будь то «пусто» или нет, зависит от того, что вы храните в нем, и ваших критериев для «пустой» записи. –

+3

Вообще говоря, при создании кода на C++ полезно избегать необработанных массивов в пользу более безопасных классов контейнеров), таких как STL). – shuttle87

+1

«array is null» и «array empty» - это две разные вещи. (И вообще, массив не может быть «пустым», хотя он может разлагаться на указатель, а указатели * могут быть равны нулю). – jalf

ответ

4

На самом деле, когда у вас есть массив с [SIZE], вы всегда можете проверить:

if(NULL == a) 
{ 
/*...*/ 
} 

Но это не обязательно, если вы не создали динамический массив (с помощью оператора новый).

См. Другие ответы, я не удалю его только потому, что он принят сейчас. Если другой ответ будет принят, я удалю этот «ответ».


EDIT (почти 4 года спустя :))

Как я получаю много вниз голосов за это, я хотел бы уточнить: я знаю это бесполезно и a будет никогда быть NULL, но он технически отвечает на вопрос о части NULL.

Да, это делает НЕ значит, массив пуст, НЕ вообще. Как отмечает @JamesMcNellis ниже, массивы не могут быть NULL, только указатели.

Он может быть полезен только для динамически распределенных массивов с инициализированным указателем перед распределением.

Во всяком случае, я буду ждать принятия другого ответа и удалю мою.

+1

СПАСИБО! это именно то, что мой друг сделал! – Luron

+0

@pts - спасибо за edid! Я задавался вопросом, как я могу это сделать (я не видел этого в FAQ), но теперь я знаю. 10x again (: –

+0

@ Luron - приветствую (: Я рад, что помог. BR, Kiril –

18

Массив в C++ не может быть нулем; только указатель может быть нулевым.

Чтобы проверить, является ли указатель нулевым, вы просто проверяете, сравнивается ли он с NULL или 0.

9

Массив в C++ не может быть «пустым». Когда вы определяете объект массива, вы явно указываете точный размер массива. Этот массив содержит (и всегда будет содержать) то точное количество элементов, которые вы указали в определении. Не больше, не меньше. Он никогда не будет «пустым».

3

Вы можете использовать либо статические, либо «динамические» массивы. Статический массив будет примерно следующим:

int array[5]; 

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

«динамический» массив, с другой стороны, было бы что-то вроде этого:

int* array = new array[5]; 

В этом случае указатель на INT указывает на массив из 5 элементов.Этот указатель может быть нулевым, и вы бы проверить этот случай с простой, если заявление:

if (array == 0) 
+1

Стандартная версия new никогда не вернет NULL (хотя версия nothrow может). – Sjoerd

+1

Хотя что-то вроде 'int * array = 0;/* stuff */array = new array [5]; 'будет тратить время, когда' array' пуст. Конечно, объявление переменной, которая не может быть инициализирована, является запахом кода. –

+0

Я согласен с тобой, Дэвид. Первая декларация была только для иллюстрации поведения динамического распределения в противоположность первому автоматическому распределению. – Vintharas

0

Если вы используете STL vector или list, вы можете использовать empty или метод size для проверки пустоты:

std::vector<int> v; 
if (v.empty()) cout << "empty\n"; 
if (v.size() == 0) cout << "empty\n"; 
std::list<int> l; 
if (l.empty()) cout << "empty\n"; 
if (l.size() == 0) cout << "empty\n"; 

Обычный массив C++ (например, int a[]') or pointer (like int * a) не знает своих размеров.

Для массивов, объявленных с размером (например, int a[42] в локальном или глобальном переменной или члене класса), вы можете использовать sizeof(a)/sizeof(a[0]), чтобы получить заявленный размер (42 в примере), который, как правило, не быть 0. Массивов вы Объявляете путь никогда не NULL.

Смежные вопросы