将指针数组初始化为结构数组

时间:2013-12-05 21:40:45

标签: c struct

我正在尝试找到一种逻辑方法来初始化包含大量初始化结构的大量数组,以便函数可以从表中选择结构并读取其值。我写了一些非常简单的测试代码,但我知道我在做错了。

“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的值读取为0x01,但它会返回0.我认为我编写struct_tbl的方式可能有问题,但我不确定。

我很感激任何帮助。对不起,如果这是一个非常简单的问题,我只是一个EE试图学习编写更好的代码!

编辑:从外部声明int my_test_var,结果仍然相同。

Edit2:更新了包含完整文件的代码。我得到的奇怪结果是,当我在64位Linux机器上编译和运行时,我得到了预期的结果。但是,当我在16位微型(Freescale Star12)上运行时,my_test_var返回零。通过监视窗口,我可以看到struct_tbl的每个元素都指向NULL而不是tbl1和tbl2。

1 个答案:

答案 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;