реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как определить размер массива?, с использованием sizeof
011119xx
сообщение Jun 21 2012, 06:47
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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]).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 21 2012, 06:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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]).

А вот так не получится.
Go to the top of the page
 
+Quote Post
011119xx
сообщение Jun 21 2012, 07:13
Сообщение #3


Местный
***

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



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

Как обоснуете?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 21 2012, 07:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Имея массив указателей и sizeof() можно узнать:
- размер массива указателей
- размер одного элемента массива (т.е. указателя)
- размер данных указателя (т.е. размер int16_t)
и все.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jun 21 2012, 07:47
Сообщение #5


;
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
011119xx
сообщение Jun 21 2012, 07:57
Сообщение #6


Местный
***

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



Спасибо.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jun 25 2012, 01:01
Сообщение #7


Познающий...
******

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



QUOTE (011119xx @ Jun 21 2012, 15:13) *
Как обоснуете?

sizeof - на сколько я знаю, макрос, который обрабатывается препроцессором.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 25 2012, 04:42
Сообщение #8


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



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

sizeof - ключевое слово компилятора и обрабатывается компилятором.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 25 2012, 08:17
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



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

Компилятором вообще то, но возвращает константу времени компиляции. Хотелка автора в виде sizeof(TEK00xx[index]) по его задумке должна возвращать разные константы, в зависимости от текущего значения index, отсюда следует, что sizeof этого ни в каком виде сделать не сможет
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jun 26 2012, 06:42
Сообщение #10


Познающий...
******

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



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

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 21:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01441 секунд с 7
ELECTRONIX ©2004-2016