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

 
 
> sizeof и указатель на структуру! Проблема!
Samodelkin
сообщение Mar 6 2008, 09:54
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Если к команде sizeof подставляю имя структуры, то все нормально, а если указатель на структуру, то она отдает размер = 2!!!!
Неужели никак нельзя передать sizeof указатель на структуру чтобы sizeof отдало реальный размер структуры????


struct {
unsigned char KontursStatus[16];
}TX_x16_i2c_01;

IndexDataTX = (char*) TX_x16_i2c_01; //делаем IndexDataTX указателем на структуру.

Buff_size = sizeof TX_x16_i2c_01; //если так, то Buff_size равет 16, и это правильно

Buff_size = sizeof(IndexDataTX[0]); //если так, то Buff_size равет 2, и это ЛАЖА!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
InvisibleFed
сообщение Mar 7 2008, 12:10
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Уважаемые, обратите внимание на ковычки до и после слова "врет". Ясно, что "sizeof возвращает размер структуры с учетом выравнивания". Но Вы посмотрите, что требуется уважаемому Samodelkin! Ему требуется определить фактически тип струткру передаваемых данных по ее размеру. Могут существовать две и более структур, значение которых sizeof вернет одинаковыми (хотя фактически типы и переменные имеют РАЗНЫЕ размеры). Samodelkin в качестве поля структуры приводит массив. Вот пример того, что может случится.

Код
struct {
    char array[3];
} struct_v1; // Размер типа для 32-х разрадной машины: 4

struct {
     char array[4];
} struct_v2; // Размер типа для 32-х разрадной машины: 4


И как теперь определить обработчик для типа данных? Совершенно очевиден смысл sizeof, но человек, задающий вопрос помоему объяснил для чего ему это надо - определить функцию-обработчик по размеру струткруры. Вот и получается, что сделать он это в предложенном варианте zltigo:
Цитата
"Вот именно из-за возможности выравнивания вариант с жестким указанием размера в первом поле и не годится."

Годится, просто он должен инициализироваться через sizeof().


не сможет (sizeof в обоих случаях вернет 4, которое Samodelkin запишет в специальное поле структуры... а что толку? Различить потом struct_v1 и struct_v2 по этому полю уже не сможет).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 7 2008, 12:32
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(InvisibleFed @ Mar 7 2008, 15:10) *
что требуется уважаемому Samodelkin!

Меня вопросы извлечения "из ничего" сначала размера структуры, а затем еще и типа струтуры не интересуют в принципе. sizeof() делает свою работу и любые рассуждения и упреки, хоть в кавычках, хоть без, к тому, что он чего-то еще комуто не сказал, хотя оооочень надо совершенно бессмысленны.



Цитата(InvisibleFed @ Mar 7 2008, 15:10) *
сделать он это в предложенном варианте zltigo:
не сможет

Я предлагал, то, о чем в том момент шла речь - автоматическое (а не через дивную константу) размещение размера стуктуры в ней самой. Подчеркиваю именно это - не больше и не меньше, а не что либо другое.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Samodelkin   sizeof и указатель на структуру! Проблема!   Mar 6 2008, 09:54
- - Qwertty   Цитата(Samodelkin @ Mar 6 2008, 12:54) In...   Mar 6 2008, 10:21
|- - Samodelkin   Цитата(Qwertty @ Mar 6 2008, 14:21) Вы в ...   Mar 6 2008, 10:27
- - Непомнящий Евгений   X = sizeof(*PTR); но у вас не указатель на структу...   Mar 6 2008, 10:28
|- - Samodelkin   Цитата(Непомнящий Евгений @ Mar 6 2008, 14...   Mar 6 2008, 10:34
- - zltigo   Цитата(Samodelkin @ Mar 6 2008, 12:54) и ...   Mar 6 2008, 10:37
- - Qwertty   Надо было сразу привести рабочий вариант Кодstruc...   Mar 6 2008, 10:45
|- - Samodelkin   Цитата(Qwertty @ Mar 6 2008, 14:45) Надо ...   Mar 6 2008, 10:58
- - Непомнящий Евгений   То, что вы написали - не скомпилится - у вас неско...   Mar 6 2008, 11:26
|- - Samodelkin   Цитата(Непомнящий Евгений @ Mar 6 2008, 15...   Mar 6 2008, 11:39
- - InvisibleFed   TX_x16_i2c_01, в вашем случае - это переменная тип...   Mar 6 2008, 12:13
|- - Непомнящий Евгений   Цитата(InvisibleFed @ Mar 6 2008, 15:13) ...   Mar 6 2008, 12:27
|- - Samodelkin   Цитата(InvisibleFed @ Mar 6 2008, 16:13) ...   Mar 6 2008, 12:50
|- - Qwertty   Цитата(InvisibleFed @ Mar 6 2008, 15:13) ...   Mar 6 2008, 13:29
|- - Samodelkin   Цитата(Qwertty @ Mar 6 2008, 17:29) Вот и...   Mar 6 2008, 13:37
|- - zltigo   Цитата(Qwertty @ Mar 6 2008, 16:29) Вот и...   Mar 6 2008, 15:52
- - Demeny   Цитата(Samodelkin @ Mar 6 2008, 12:54) st...   Mar 6 2008, 13:52
|- - Samodelkin   Цитата(Demeny @ Mar 6 2008, 17:52) Теперь...   Mar 6 2008, 14:40
|- - Сергей Борщ   Цитата(Samodelkin @ Mar 6 2008, 16:40) Но...   Mar 6 2008, 15:53
|- - Samodelkin   Цитата(Сергей Борщ @ Mar 6 2008, 19:53) Д...   Mar 6 2008, 17:21
- - bzx   У тебя путаница с указателями в голове... То что т...   Mar 6 2008, 14:08
- - InvisibleFed   Это все хорошо, но как тогда быть с тем, что sizeo...   Mar 6 2008, 23:50
|- - rezident   Цитата(InvisibleFed @ Mar 7 2008, 04:50) ...   Mar 7 2008, 00:52
|- - Непомнящий Евгений   Цитата(InvisibleFed @ Mar 7 2008, 02:50) ...   Mar 7 2008, 05:16
|- - zltigo   Цитата(InvisibleFed @ Mar 7 2008, 02:50) ...   Mar 7 2008, 07:32
|- - amw   Цитата(InvisibleFed @ Mar 7 2008, 01:50) ...   Mar 7 2008, 08:45
- - InvisibleFed   Обсуждать по теме тут нечего. Я лично не понял ни ...   Mar 7 2008, 13:09
|- - zltigo   Цитата(InvisibleFed @ Mar 7 2008, 16:09) ...   Mar 7 2008, 15:44
- - radiofill   Цитата(Samodelkin @ Mar 6 2008, 12:54) Ес...   Mar 10 2008, 15:01


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:22
Рейтинг@Mail.ru


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