Нетрадиционный доступ к массиву

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
tmp
Сообщения: 4
Зарегистрирован: 08 ноя 2012, 19:06
Откуда: Moscow
Контактная информация:

Коллеги!
Есть массив вот такого структурного вида и разнообразного контента:

Код: Выделить всё

   
struct{
 struct{ 
  char eng[MaxEngNum]; 
  bool IMUaccelX,IMUaccelY,IMUaccelZ;
  bool IMUrotX,IMUrotY,IMUrotZ;
  char GPS; 
 }failed;
 {
  int other_var;
 }many_other_struct_here;
}my_big_struct;
я хочу работать с ним как с обычным отрезком памяти.
как получить доступ к каждому элементу приведенному к char, начиная от его начала?

Поясняю:

Код: Выделить всё

   
    long lvar1=0;
    int i;
    char ch;

//последовательно суммирую все элементы массива что бы выявить, есть ли там хоть чтото отличное от нуля:

    for(i=0;i<sizeof(my_big_struct.failed);i++)
    {

// здесь должна быть строка которая берет char от указанного смещения, от начала массива
           ch=((char *)my_big_struct.failed)[i];
 //примерно что нить такое - вопрос... Что именно? голова полностью запуталась в этих указателях уже...

// потом обычное суммирование каждого байта
     lvar1+=ch;

    }

//а на выходе будет примерно так 
    if(lvar1!=0) WhatWeSend.failures=true;
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Напрочь перепутаны понятия структуры и объекта этой структуры. Выглядеть всё должно примерно так:

Код: Выделить всё

struct my_big_struct{
 struct failed_struct{
  char eng[MaxEngNum];
  bool IMUaccelX,IMUaccelY,IMUaccelZ;
  bool IMUrotX,IMUrotY,IMUrotZ;
  char GPS;
 } failed;

  int other_var;

  <many_other_struct_h>
} my_big_object;

Код: Выделить всё

    long lvar1=0;
    int i;
    char ch;

    for(i=0 ;i < sizeof(my_big_struct::failed_struct); ++i)
    {
        ch=((char *)my_big_object.failed)[i];
        lvar1 += ch;
    }
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
tmp
Сообщения: 4
Зарегистрирован: 08 ноя 2012, 19:06
Откуда: Moscow
Контактная информация:

Благодарю за наводку!
Ваша к сожалению, не сработала, а вот так вполне устроило компилятор, да и результатом меня:

Код: Выделить всё

long lvar1=0;
unsigned int i;

//BaroStatic - в данном случае это адрес нулевого элемента в субмассиве, сам субмассив компилятору не понравился.

for(i=sizeof(my.failed);i>0;i--) lvar1+=(char)(&my.failed.BaroStatic)[i]; //что нить отличается от нуля?
if(lvar1!=0) WhatWeSend.failures=true;
Ответить