Количество элементов массива.

Тема в разделе "Arduino & Shields", создана пользователем Alexey Zhigalo, 4 май 2016.

  1. Доброго времени суток!
    Подскажите пожалуйста, как узнать количество элементов массива.

    Вот сам массив:
    Код (C++):
    char* ms[] = {"Menu1","Menu2","Menu3","Menu4","Menu5"};
    Пробовал sizeof(ms) - не вывело 5, а вовсе ничего не вывело.
     
  2. AlexVS

    AlexVS Гик

    Могу ошибаться, но sizeof - должен вернуть количество байт занятые массивом.
    Сдается мне, что дело в указателе......
     
  3. Да, sizeof должен вернуть другое. Но как узнать количество элементов..
    Почему на с/с++ все так сложно... На C# или Java делаться все элементарно...
     
  4. Karabas

    Karabas Гик

    sizeof вернет размер указателя (один байт или сколько там у Ардуино это считается), даже в случае string array [x] он вернет размер всего массива. Если массив динамический- должн быть метод для данного контейнера, что то вроде array.elements(), если статический- так и так известен его размер.

    На С++ не сложно, просто по другому, как автомат и механика. Мне вот наоборот С# кажется излишне громоздким.
     
  5. Честно говоря не понял....
    По началу когда изучил только C++ и только начал переходить C# тоже так казалось... но в C# все намного проще. Вот например:
    String[] array = { "zero", "one", "two", "three" };

    int a = array.length();
     
  6. ostrov

    ostrov Гуру

    sizeof(ms) выводит 10. sizeof(ms[0]) выводит 2. Так как ms[] это массив указателей, то логично, что он выводит длину указателя (2 байта), для 5 элементов 10 байт. Вроде бы так.

    Попробуйте = sizeof(ms)/2;
     
    Последнее редактирование: 4 май 2016
  7. AlexU

    AlexU Гуру

    Сложного в этом ничего нет. Макрос 'sizeof' возвращает размер памяти в байтах, который требуется для хранения данных того или иного типа. В данном случае имеется массив из 5-ти указателей на строки. В AVR указатель имеет размер 2 байта -- итого 'sizeof' вернёт число 10 (пять указателей по два байта каждый).
    Для того, что бы узнать количество элементов в массиве, нужно общий размер массива разделить на размер каждого элемента, в данном случае тип элемента 'char *':
    Код (C++):
    sizeof(ms) / sizeof(char *)
     
  8. Спасибо большое за грамотное объяснение)