【发布时间】:2018-10-20 04:38:38
【问题描述】:
我遇到了这段代码:
typedef struct {
char *name;
char *value;
} SPAM;
typedef struct {
char *name;
int num_spams;
SPAM *spams;
} EGG;
SPAM my_spams[2] = {
{ "name1", "value1" },
{ "name2", "value2" },
};
EGG my_eggs[1] = {
{ "first egg", 1, my_spams }
};
EXPORT(int) getSPAMANDEGGS(EGG **eggs)
{
*eggs = my_eggs;
return 1;
}
在这个声明中,EGG 结构的定义不应该有 SPAM **spams;作为 spams 成员的定义,因为我们稍后会在其中存储一个 SPAM 数组?
【问题讨论】:
-
数组衰减为指针。所以
SPAM *spams可以指向SPAM数组的第一个元素。 -
就像你可以写
char foo[] = "abc"; char *foo_ptr = foo; -
{ "first egg", 1, my_spams }应该是{ "first egg", 2, my_spams },因为num_spams应该对应my_spams数组中的元素个数,也就是2。