【发布时间】:2016-12-18 10:34:03
【问题描述】:
为什么有人会这样做?更好的是,这甚至是如何工作的?我会假设这会以某种方式创建一个由三个结构组成的数组,其中只定义了第一个成员。我意识到一个指针指向数组的第一个元素,我知道它是如何工作的,但是它的定义方式让我失望! (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);
}
【问题讨论】:
-
你应该展示真实的代码。可能是辅助函数被设计为与数组一起使用。因此,如果一个数组只包含一个元素,则应将其声明为数组而不是单个结构。
-
没有办法只初始化结构的一部分,要么全有,要么全无。
标签: c arrays syntax initialization structure