Цитата(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, и это тоже правильно !!!
Сделано в Китае. Упаковано в России.