2013-12-05 6 views
0

Я пытаюсь найти логический способ инициализации большого количества массивов, содержащих большое количество инициализированных структур, чтобы функция могла выбрать структуру из таблицы и прочитать ее значения. Я написал довольно простой код , но я знаю, что я делаю что-то не так на этом пути.Инициализировать массив указателей на массив структур

Содержимое "struct_test.h"

int my_test_var = 0; 

typedef struct 
{ 
    int a; 
    int b; 
}my_struct; 

const my_struct tbl1[] = 
{ 
    {0x01,0x02}, 
    {0x03,0x04}, 
}; 

const my_struct tbl2[] = 
{ 
    {0x05,0x06}, 
    {0x07,0x08}, 
}; 

const my_struct *struct_tbl[] = 
{ 
    tbl1, 
    tbl2, 
}; 

Читается содержимое "struct_test.c"

#include "struct_test.h" 

int main(void) 
{ 
    if(struct_tbl[0][0].a == 0x01) 
     my_test_var = 0x01; 

    return 0; 
} 

Я бы ожидать, чтобы прочитать значение my_test_var как 0х01, но он возвращается как 0. Я думаю, что что-то может быть неправильно с тем, как я пишу struct_tbl, но я не уверен.

Буду признателен за любую помощь. Извините, если это очень простой вопрос, я просто EE, пытающийся научиться писать лучший код!

Редактировать: Объявлено int my_test_var извне, все тот же результат.

Edit2: Обновлен код для включения полных файлов. Потрясенный результат, который я получаю, заключается в том, что когда я компилирую и запускаю свою 64-разрядную машину Linux, я получаю ожидаемый результат. Однако, когда я запускаю свой 16-битный микро (Freescale Star12), my_test_var возвращается как ноль. Через окно просмотра я вижу, что каждый элемент struct_tbl указывает на NULL, а не tbl1 и tbl2.

+0

В дополнение к уже предоставленной ответ я рекомендую вам прочитать http://www.unixwiz.net/techtips/reading-cdecl.html – nonsensickle

+0

Вы можете разместить другие части кода? –

ответ

0
if(struct_tbl[0][0].a == 0x01) 
    int my_test_var = 0x01; 

Избавьтесь от ключевого слова int. Это объявляет (вложенную) переменную, которая указана только в описании if. После завершения инструкции if переменная исчезает.

if (struct_tbl[0][0].a == 0x01) 
    my_test_var = 0x01; 
+0

Спасибо. Это была глупая ошибка. Я объявил 'my_test_var' внешним для оператора if, но он все равно дает мне те же результаты. – adammgannon

Смежные вопросы