1

我有一个图书馆的以下结构:

typedef struct
{
    unsigned char pin;              //!< Module pin.
    unsigned char function;         //!< Module function.
} gpio_map_t[]; 

现在,在我的代码中,我创建了一个这样的结构实例:

gpio_map_t display_spi_pins = {
        {1,1},
        {2,2},
        {3,3},
        {4,4}
    };

然后我创建一个这样的指针:

gpio_map_t* spi_pins_pointer = &display_spi_pins;

直到这里一切顺利,没有编译错误。

我想知道如何取回对 display_spi_pins 的引用。我尝试这样:

gpio_map_t display_spi_pins_new_reference = *spi_pins_pointer;

但我得到一个编译错误说:

数组初始化器必须是初始化器列表

编辑: 不要忘记 typedef sstruct ... 来自库,我无法修改它。

4

4 回答 4

1

在这种情况下,您不能通过指针访问数据,您可以直接使用数组访问它 display_spi_pins

for(i=0; i<sizeof(display_spi_pins)/sizeof(display_spi_pins[0]); i++) {
    printf("pin[%d]=%X, function[%d]=%X\n",
           i, display_spi_pins[i].pin,
           i, display_spi_pins[i].function);
}
于 2013-01-30T10:40:42.097 回答
1

问题是您将其定义gpio_map_t为长度未定义的结构数组。做类似的事情:

typedef struct
{
    unsigned char pin;              //!< Module pin.
    unsigned char function;         //!< Module function.
} gpio_map_t;

gpio_map_t[] display_spi_pins = {
    {1,1},
    {2,2},
    {3,3},
    {4,4}
};

gpio_map_t** spi_pins_pointer = &display_spi_pins;
gpio_map_t* display_spi_pins_new_reference = *spi_pins_pointer;

(请记住 agpio_map_t*非常接近 a gpio_map_t[])。

于 2013-01-30T10:43:20.307 回答
0

不要将类型别名声明gpio_map_t为数组类型。相反,当需要结构的数组时,将变量声明为数组,并仅将指针用于引用。

于 2013-01-30T10:42:26.750 回答
0

这是你想要的:

typedef struct
{
    unsigned char pin;              //!< Module pin.
    unsigned char function;         //!< Module function.
} gpio_map_t[]; 


void main()
{
    gpio_map_t display_spi_pins = {{1,1}, {2,2}, {3,3}, {5,6}};
    gpio_map_t* spi_pins_pointer = &display_spi_pins;
    gpio_map_t* display_spi_pins_new_reference = spi_pins_pointer;

    int i;    

    for(i=0;i<4;i++){
        printf("%d: %d  %d\n",i,(display_spi_pins+i)->pin,(display_spi_pins+i)->function);

        if(((display_spi_pins+i)->pin != (*spi_pins_pointer+i)->pin) ||
            ((display_spi_pins+i)->pin != (*display_spi_pins_new_reference+i)->pin) ||
            ((display_spi_pins+i)->function != (*spi_pins_pointer+i)->function) ||
            ((display_spi_pins+i)->function != (*display_spi_pins_new_reference+i)->function))  
            printf("Reference ERROR\n");
    }
}
于 2013-01-31T05:44:01.783 回答