|
|
  |
Как определить размер массива?, с использованием sizeof |
|
|
|
Jun 21 2012, 06:47
|

Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544

|
Массивы объявлены следующим образом: Код 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]).
|
|
|
|
|
Jun 21 2012, 06:51
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(011119xx @ Jun 21 2012, 10:47)  sizeof(TEK0018) дает результат 5000, что верно. sizeof(TEK0018) / sizeof(TEK0018[0]) даст верный результат. Цитата(011119xx @ Jun 21 2012, 10:47)  Мне же нужно, что-то типа sizeof(TEK00xx[index]). А вот так не получится.
|
|
|
|
|
Jun 21 2012, 07:47
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(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 }; Больше-никак.
Сообщение отредактировал _Pasha - Jun 21 2012, 07:49
|
|
|
|
|
Jun 25 2012, 08:17
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(haker_fox @ Jun 25 2012, 05:01)  sizeof - на сколько я знаю, макрос, который обрабатывается препроцессором. Компилятором вообще то, но возвращает константу времени компиляции. Хотелка автора в виде sizeof(TEK00xx[index]) по его задумке должна возвращать разные константы, в зависимости от текущего значения index, отсюда следует, что sizeof этого ни в каком виде сделать не сможет
|
|
|
|
|
Jun 26 2012, 06:42
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (XVR @ Jun 25 2012, 16:17)  Компилятором вообще то, но возвращает константу времени компиляции. Хотелка автора в виде sizeof(TEK00xx[index]) по его задумке должна возвращать разные константы, в зависимости от текущего значения index, отсюда следует, что sizeof этого ни в каком виде сделать не сможет Да, я уже понял, спасибо! Однако, цель моего предыдущего ответа все-таки состояла в том, чтобы намекнуть автоу, почему он не может вычислять размер объектов во время выполнения программы. Поэтому, объективно я прав!
--------------------
Выбор.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|