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

 
 
> 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
Ответов
Demeny
сообщение Mar 6 2008, 13:52
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(Samodelkin @ Mar 6 2008, 12:54) *
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, и это ЛАЖА!!!

Как у кого, но у меня Ваш пример не компилируется вообще. Ошибка тут
Код
IndexDataTX = (char*) TX_x16_i2c_01; //делаем IndexDataTX указателем на структуру.

Должно быть так.
Код
IndexDataTX = (char*) &TX_x16_i2c_01; //делаем IndexDataTX указателем на структуру.

Теперь правильно с точки зрения синтаксиса. И sizeof (TX_x16_i2c_01) равен 16, а sizeof(IndexDataTX[0]) зависит от того, каким типом указателя я объявлю переменную IndexDataTX. Если это указатель на char, то sizeof(IndexDataTX[0]) == 1, если это указатель на структуру, то и результат равен размеру структуры. В чём несоответствие ?
Цитата(Samodelkin @ Mar 6 2008, 16:37) *
Ну про жесткое указание никто не говорит, но вот получается что и sizeof тоже "врет" в некоторых случаях!!!! Вот и возникает вопрос, как безошибочно выяснить реальный обьем данных в структуре!!!!!????

Ну так подсовывайте sizeof() правильный указатель и будете получать правильный результат.
Код
struct    {
unsigned char KontursStatus[16];
}TX_x16_i2c_01,  *pTX_x16_i2c_01;

pTX_x16_i2c_01 = &TX_x16_i2c_01; //присваиваем pTX_x16_i2c_01 значение ссылки на структуру.

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

Buff_size = sizeof(pTX_x16_i2c_01[0]); //если так, то Buff_size равет 16, и это тоже правильно !!!


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Mar 6 2008, 14:40
Сообщение #3


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

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



Цитата(Demeny @ Mar 6 2008, 17:52) *
Теперь правильно с точки зрения синтаксиса. И sizeof (TX_x16_i2c_01) равен 16, а sizeof(IndexDataTX[0]) зависит от того, каким типом указателя я объявлю переменную IndexDataTX. Если это указатель на char, то sizeof(IndexDataTX[0]) == 1, если это указатель на структуру, то и результат равен размеру структуры. В чём несоответствие ?
[/code]


Согласен, так оно и есть! Но КАК обьявить переменную IndexDataTX так чтобы это был указатель на структуру и результат sizeof был равен размеру структуры?????
Чем её обьявить?????
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
|- - Сергей Борщ   Цитата(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, 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 - 14:21
Рейтинг@Mail.ru


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