我从库中得到以下结构:
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 sctruct ...来自库,我无法修改它。
答案 0 :(得分: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);
}
答案 1 :(得分: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;
(请记住,gpio_map_t*
非常接近gpio_map_t[]
)。
答案 2 :(得分:0)
不要将类型别名gpio_map_t
声明为数组类型。相反,当需要结构数组时,将变量声明为数组,并仅将指针用于引用。
答案 3 :(得分: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");
}
}