不同类型的“EOF”值(联合)?

时间:2017-07-26 02:40:42

标签: c eof

我正在读C书 K& R 。我知道系统上的EOF-1

int eof = EOF;
printf("EOF on my system is: %d\n",eof);

但是当我将EOF分配给一个联盟时,输出会让我感到困惑。我只能理解v.ival-1。任何人都可以解释为什么其他人:v.cvalv.fvalv.dval会是这样的?

union eof_val {
    int ival;
    char cval;
    float fval;
    double dval;
} eof;

eof.ival = EOF;

printf("EOF to int = %d\n", eof.ival);        /* output: -1 */
printf("EOF to char = %c\n", eof.cval);       /* output: � */
printf("EOF to float = %f\n", eof.fval);      /* output: nan */
printf("EOF to double = %f\n", eof.dval);     /* output: 0.000000 */

1 个答案:

答案 0 :(得分:1)

工会足以容纳其中最大的成员。它们并非如此。一次只能使用其中一个值。

你设置了ival并且这很好,但这意味着cvalfvaldval几乎持有垃圾(不完全:你可以根据它找出它关于ival)的价值

不是重复,而是有趣的阅读:Why do we need C Unions?