C上的联盟数组

Pab*_*blo 3 c arrays unions

我已经宣布了这一系列的工会:

union Function {
    char* name;
    double (*fnct)();
    int args;
};

union Function functions[] = {
    {.name = "acos", .fnct = acos, .args = 1},
    {.name = "asin", .fnct = asin, .args = 1},
    {.name = "atan", .fnct = atan, .args = 1},
};
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用它时,我得到一个Segmentation fault错误.

for(int i = 0; i < sizeof(functions) / sizeof(union Function); i++) {
    printf("%d\n", functions[i].args);
    printf("%s\n", functions[i].name); //HERE!
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*vie 9

一名工会包含任何成员,而不是所有成员.

所以最后一个初始化器是最后一个,意味着它的值是正确的1.因此,打印名称(字符串)会导致seg错误,因为printf尝试取消引用地址1.

如果您想拥有所有成员,请使用struct而不是union.