为什么有人要这样做?更重要的是,这究竟是如何工作的?我曾经认为这会以某种方式创建一个只定义了第一个成员的三个结构体数组。我知道指针指向数组的第一个元素,我也可以理解这是如何工作的,但这是如何定义的却让我困扰!(gcc 4.8.4)
void do_something(const void *);
typedef struct{
int a;
char b;
int c;
} the_data_t;
int main(int argc, char *argv[])
{
the_data_t my_data[] = {10, 'a', 30};
do_something((const void *)my_data);
}
void do_something(const void *data)
{
printf("data a: %d\ndata b: %c\ndata c: %d\n", ((the_data_t*)data)->a,
((the_data_t*)data)->b, ((the_data_t*)data)->c);
}
输出
数据a: 10
数据b: a
数据c: 30
不管怎样,我将其更改为以下内容...
int main(int argc, char *argv[])
{
the_data_t my_data = {10, 'a', 30};
do_something(&my_data);
}