我发现了这个密码:

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指针。

08-16 04:13