我发现了这个密码:
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 struct的定义不应该有SPAM**SPAM;作为SPAM成员的定义,因为我们稍后在那里存储了一个SPAM数组?
最佳答案
不,不应该。SPAM
值的数组通过单个指针表示,因此SPAM *spams
是正确的。getSPAMANDEGGS
函数的参数需要两个星号的原因是它设置了从外部传递给它的指针:
EGG *eggArray; // First asterisk is due to *
int eggArraySize = getSPAMANDEGGS(&eggArray); // Second asterisk is due to &
如果没有
&
运算符,则无法将新值设置为getSPAMANDEGGS
指针。