Я пытаюсь найти логический способ инициализации большого количества массивов, содержащих большое количество инициализированных структур, чтобы функция могла выбрать структуру из таблицы и прочитать ее значения. Я написал довольно простой код , но я знаю, что я делаю что-то не так на этом пути.Инициализировать массив указателей на массив структур
Содержимое "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.
В дополнение к уже предоставленной ответ я рекомендую вам прочитать http://www.unixwiz.net/techtips/reading-cdecl.html – nonsensickle
Вы можете разместить другие части кода? –