Проверить элемент массива на ноль

0

У меня есть массив, называемый quint8 block[16] который я:

  • инициализируется до нуля с помощью block[16] = { 0 }
  • заполнить его некоторыми данными
  • затем передать его методу/функции в качестве аргумента, такого как bool fill(const quint8 *data)

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

Правильно ли выполнять проверку таким образом? if(!data[i])? Я видел подобные вопросы и ответы на этом форуме, но все они используют \0 или NULL и я слышал, что это не очень хороший стиль для этого, и это меня смутило.

  • 0
    Что такое quint8 ?
  • 1
    Массив, если целые числа не могут иметь нулевые элементы.
Показать ещё 8 комментариев
Теги:
arrays
pointers

3 ответа

4

Целочисленные типы не имеют понятия "null" в C++.

Возможны две идеи:

1) Используйте некоторое определенное целочисленное значение для обозначения "не установлено". Если для ваших данных верно 0, то, очевидно, его нельзя использовать для этого. Возможно, какое-то другое значение будет работать, например максимальное значение для типа (похоже, в этом случае оно будет 0xff). Но если все ваши значения действительны для ваших данных, тогда эта идея не сработает.

2) Используйте некоторые другие данные для отслеживания значений, которые были установлены. Одним из способов может быть массив bools, каждый из которых соответствует элементу данных. Другим способом было бы просто подсчитать, сколько элементов было установлено на значение (очевидно, это работает только тогда, когда ваши данные заполняются последовательно без каких-либо пробелов).

2

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

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

  • 1
    Я должен прочитать некоторые двоичные данные из двоичного файла и поместить их в этот массив, чтобы я мог извлечь из него определенные поля интересных данных, но если что-то пойдет не так, это может привести к сбою. также 0 - совершенно достоверные данные.
0

Это зависит от того, имеет ли тип quint8 оператор преобразования bool или какой-либо другой оператор преобразования, например, для целочисленного типа.

Если quint8 - некоторый целочисленный тип (некоторый typedef для интегрального типа), то проблем нет. Это определение

quint8 block[16] = { 0 };

инициализирует все элементы массива нулем.

Учтите, что в общем случае задача может быть выполнена с помощью алгоритмов std::find, std::find_if или std::any_of объявленных в заголовке <algorithm>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню