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

 
 
> 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 6 2008, 23:50
Сообщение #2


Местный
***

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



Это все хорошо, но как тогда быть с тем, что sizeof, пусть даже теоретически, но "ВРЕТ"!? Вам известен размер структуры, запихиваете его в поле size этой структуры. И запихиваете, не то что выдает sizeof, а то что Вы как программист наверняка знаете. Вариант zltigo может обломиться опять же по причине того, что могут получиться реально разные по размеру переменные типа структуры с одним и тем же значением в поле size. В функцию передаете указатель на структуру. Теперь уместный вопрос: а как тогда определить внутри вызываемой функции конкретный тип структуры, ее размер? У меня нет ответа. =) Я примерно год назад разбирал код одной библиотеки (Jasper, JPEG2000). Код большой и красивый (коментариев мало, но структурированность хорошая для чистого C). Так вот там встретил вариант от которого плевался. Принцип на Ваш случай такой. Делать поле size первым полем структуры (всех) и, зная это, обращаться к этому полю, начиная с первого байта указаеля. Т.е. если size это 32 разряда int, то вот первых четыре байта и выдергивать из области памяти по указателю. Понимаю, выглядит ОООчень коряво, но так, как оказалось, делают даже крутые разработчики (тот кто написал Jasper для меня крут, достаточно чуток над кодом посидеть, чтобы это понять).
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
|- - 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, 12:10
|- - zltigo   Цитата(InvisibleFed @ Mar 7 2008, 15:10) ...   Mar 7 2008, 12:32
- - 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 - 13:21
Рейтинг@Mail.ru


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