Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как определить размер массива?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
011119xx
Массивы объявлены следующим образом:
Код
const int16_t TEK0018[2500] = {88, ..., 85};
const int16_t TEK0019[2500] = {87, ..., 90};
...
const int16_t TEK0029[2500] = {89, ..., 84};

const int16_t *TEK00xx[] = {TEK0018, TEK0019, TEK0020, TEK0021, TEK0022, TEK0023, TEK0024, TEK0025, TEK0026, TEK0027, TEK0028, TEK0029};

Далее по ходу программы нужно определить размер массива на который указывает TEK00xx[index]. Как это сделать с использованием sizeof? sizeof(TEK0018) дает результат 5000, что верно. Мне же нужно, что-то типа sizeof(TEK00xx[index]).
aaarrr
Цитата(011119xx @ Jun 21 2012, 10:47) *
sizeof(TEK0018) дает результат 5000, что верно.

sizeof(TEK0018) / sizeof(TEK0018[0]) даст верный результат.

Цитата(011119xx @ Jun 21 2012, 10:47) *
Мне же нужно, что-то типа sizeof(TEK00xx[index]).

А вот так не получится.
011119xx
Цитата(aaarrr @ Jun 21 2012, 11:51) *
А вот так не получится.

Как обоснуете?
aaarrr
Имея массив указателей и sizeof() можно узнать:
- размер массива указателей
- размер одного элемента массива (т.е. указателя)
- размер данных указателя (т.е. размер int16_t)
и все.
_Pasha
Цитата(011119xx @ Jun 21 2012, 09:47) *
Массивы объявлены следующим образом:
Код
const int16_t TEK0018[2500] = {88, ..., 85};
const int16_t TEK0019[2500] = {87, ..., 90};
...
const int16_t TEK0029[2500] = {89, ..., 84};

const int16_t *TEK00xx[] = {TEK0018, TEK0019, TEK0020, TEK0021, TEK0022, TEK0023, TEK0024, TEK0025, TEK0026, TEK0027, TEK0028, TEK0029};

Далее по ходу программы нужно определить размер массива на который указывает TEK00xx[index]. Как это сделать с использованием sizeof? sizeof(TEK0018) дает результат 5000, что верно. Мне же нужно, что-то типа sizeof(TEK00xx[index]).

Код
#define Item(name) {.ptr=name, .size=sizeof(name)}
const struct{
int16_t *ptr;
size_t size;
} TEK00XX[]={
Item(TEK0018),
Item(TEK0019), //etc
};

Больше-никак.
011119xx
Спасибо.
haker_fox
QUOTE (011119xx @ Jun 21 2012, 15:13) *
Как обоснуете?

sizeof - на сколько я знаю, макрос, который обрабатывается препроцессором.
dxp
QUOTE (haker_fox @ Jun 25 2012, 08:01) *
sizeof - на сколько я знаю, макрос, который обрабатывается препроцессором.

sizeof - ключевое слово компилятора и обрабатывается компилятором.
XVR
Цитата(haker_fox @ Jun 25 2012, 05:01) *
sizeof - на сколько я знаю, макрос, который обрабатывается препроцессором.

Компилятором вообще то, но возвращает константу времени компиляции. Хотелка автора в виде sizeof(TEK00xx[index]) по его задумке должна возвращать разные константы, в зависимости от текущего значения index, отсюда следует, что sizeof этого ни в каком виде сделать не сможет
haker_fox
QUOTE (XVR @ Jun 25 2012, 16:17) *
Компилятором вообще то, но возвращает константу времени компиляции. Хотелка автора в виде sizeof(TEK00xx[index]) по его задумке должна возвращать разные константы, в зависимости от текущего значения index, отсюда следует, что sizeof этого ни в каком виде сделать не сможет

Да, я уже понял, спасибо! Однако, цель моего предыдущего ответа все-таки состояла в том, чтобы намекнуть автоу, почему он не может вычислять размер объектов во время выполнения программы. Поэтому, объективно я прав! biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.