Доброго времени суток! Подскажите пожалуйста, как узнать количество элементов массива. Вот сам массив: Код (C++): char* ms[] = {"Menu1","Menu2","Menu3","Menu4","Menu5"}; Пробовал sizeof(ms) - не вывело 5, а вовсе ничего не вывело.
Могу ошибаться, но sizeof - должен вернуть количество байт занятые массивом. Сдается мне, что дело в указателе......
Да, sizeof должен вернуть другое. Но как узнать количество элементов.. Почему на с/с++ все так сложно... На C# или Java делаться все элементарно...
sizeof вернет размер указателя (один байт или сколько там у Ардуино это считается), даже в случае string array [x] он вернет размер всего массива. Если массив динамический- должн быть метод для данного контейнера, что то вроде array.elements(), если статический- так и так известен его размер. На С++ не сложно, просто по другому, как автомат и механика. Мне вот наоборот С# кажется излишне громоздким.
Честно говоря не понял.... По началу когда изучил только C++ и только начал переходить C# тоже так казалось... но в C# все намного проще. Вот например: String[] array = { "zero", "one", "two", "three" }; int a = array.length();
sizeof(ms) выводит 10. sizeof(ms[0]) выводит 2. Так как ms[] это массив указателей, то логично, что он выводит длину указателя (2 байта), для 5 элементов 10 байт. Вроде бы так. Попробуйте = sizeof(ms)/2;
Сложного в этом ничего нет. Макрос 'sizeof' возвращает размер памяти в байтах, который требуется для хранения данных того или иного типа. В данном случае имеется массив из 5-ти указателей на строки. В AVR указатель имеет размер 2 байта -- итого 'sizeof' вернёт число 10 (пять указателей по два байта каждый). Для того, что бы узнать количество элементов в массиве, нужно общий размер массива разделить на размер каждого элемента, в данном случае тип элемента 'char *': Код (C++): sizeof(ms) / sizeof(char *)