Работа с массивом, размер массива sizeof()
- Войдите на сайт для отправки комментариев
Ср, 04/11/2020 - 23:31
Подскажите почему, а главное что делать, вызываю функцию sizeof() она выдает неверные значения, ну или если быть корректным, не те что я жду, а именно, код:
int daysofwork[] = {2,4};
int val = 0;
void setup {
Serial.begin(9600);
}
void loop {
val = sizeof(daysofwork);
Serial.println(val);
}
в данном случае val = 4, если элемента 3 то шести, как я понял она возвращает количество байт занимаемых массивом, а как получить в числовом выражении количество элементов массива или длину массива?
Ну поделить на два я и сам догадался, вопрос как это без костылей исправить и как получить реальный размер массива?
Ну поделить на два я и сам догадался, вопрос как это без костылей исправить и как получить реальный размер массива?
Если б догадались - сами бы и сделали наверно.
Это не костыль, а широко используемый метод получения размера массива. Что вы тут хотите "исправить" - не понятно. Если вы спрашиваете о какой-нибудь системной функции, которая бы возвращала длину массива - такой в С/С++ нет.
Что вы подразумеваете под "реальной длиной" - я вообще не в курсе. Вы случайно со скриптовыми языками не путаете?
На самом деле в языке Си ситуация, когда автор программы не знает длину созданного им самим массива - довольно редкая, наверно поэтому отдельной функции под это не придумали.
uint32_t array[] = {1,2,3,4,5,6,7,8};
без привязки к конкретному типу данных:
size = sizeof(array)/sizeof(array[0]);
конпилятор сам вычислит всё, что надо и подставит
Дополню предыдущего оратора:
sizeof(array) вернёт количество байт всего массива
а,
sizeof(array[0]) вернёт количество байт одного элемента
Ну и соответственно разделив первое на второе, получим количество элементов массива
template <typename T, size_t N> constexpr size_t countof(T const (&)[N]) { return N; }Вариант с sizeof втихую даст неправильный результат, если ему подсунуть указатель вместо статического массива.
Вариант с sizeof втихую даст неправильный результат, ...
sizeof всегда даёт правильный результат.
Вариант с sizeof втихую даст неправильный результат, ...
sizeof всегда даёт правильный результат.
Ну поделить на два я и сам догадался, вопрос как это без костылей исправить и как получить реальный размер массива?
Если б догадались - сами бы и сделали наверно.
Это не костыль, а широко используемый метод получения размера массива. Что вы тут хотите "исправить" - не понятно. Если вы спрашиваете о какой-нибудь системной функции, которая бы возвращала длину массива - такой в С/С++ нет.
Что вы подразумеваете под "реальной длиной" - я вообще не в курсе. Вы случайно со скриптовыми языками не путаете?
На самом деле в языке Си ситуация, когда автор программы не знает длину созданного им самим массива - довольно редкая, наверно поэтому отдельной функции под это не придумали.
Я же спрашиваю почему, а не как сделать так чтобы скетч заработал, он работает но отдельная переменная меня напрягает.
Я пишу программу для общего пользования и мне стремно что в цикле у меня i < val, а не i<sizeof(array); если мы пишем массив, а часто сами заносим его размер, то странно что нет такой функции, вот для меня это и есть костыль.
как это без костылей исправить и как получить реальный размер массива?
Это не костыль, а самый что ни на есть мэйнстримовый метод получения реального размера массива. Только не как в №1, а как в #4
Не зная таких простых вещей? Ну, удачи!
дел
не понимаю зачем столько желчи
не понимаю зачем столько желчи
просто у нас велосипеда нет... :((
Жена просит добавить: да и водка кончилась! Вот! И велосипед, в общем, не так важен.
не понимаю зачем столько желчи
Ну а как еще реагировать на человека, который вместо изучения норм языка - обьявляет их неправильными? Разве это можно обсуждать серьезно?
вы похоже ничему не научились за полтора года.... Ни программированию на С, ни общению на форумах:)
не понимаю зачем столько желчи
Это Вы про посты №№ 2 и 9? Я тоже не понимаю :-(
не понимаю зачем столько желчи
Где ж я их неправильными объявил? Сказал странно, что нет такой функции или оператора. К сожалению да, программированию так и не удалось уделить столько времени сколько хотелось бы, а на счет общения на форуме, писать человеку "если б догадались" крайне не уважительно, тем более вы меня не знаете и не знаете мои интеллектуальные способности, да я не программист, к сожалению, но это никак не говорит о моих возможностях найти закономерность где 2=4 3=6, как то оскорбительно звучит, не находите?
И? Что сказать хотел? В сети нет и не может быть априорного уважения. Покажи за что тебя следует уважать. Это не светский раут и ханжество неуместно. В этом основное положительно достоинство сети, в отличии от очных форм общения.