不同类型(联合)中的 "EOF" 值?
The "EOF" value in different type (an union)?
我正在读 C 书 K&R。我知道 我系统上的宏 EOF
是 -1
。
int eof = EOF;
printf("EOF on my system is: %d\n",eof);
但是当我将 EOF
分配给一个联合时,输出不知何故让我感到困惑。我只能理解v.ival
是-1
。任何人都可以解释为什么其余的人:v.cval
、v.fval
和 v.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 */
工会足够大,可以容纳最大的成员。它并不能容纳所有这些。一次只能使用其中一个值。
你已经设置了 ival
并且它很好,但这意味着 cval
、fval
和 dval
几乎是垃圾(不完全是:你可以理解根据 ival
)
的值输出
不是重复的,但有趣的阅读:Why do we need C Unions?
我正在读 C 书 K&R。我知道 我系统上的宏 EOF
是 -1
。
int eof = EOF;
printf("EOF on my system is: %d\n",eof);
但是当我将 EOF
分配给一个联合时,输出不知何故让我感到困惑。我只能理解v.ival
是-1
。任何人都可以解释为什么其余的人:v.cval
、v.fval
和 v.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 */
工会足够大,可以容纳最大的成员。它并不能容纳所有这些。一次只能使用其中一个值。
你已经设置了 ival
并且它很好,但这意味着 cval
、fval
和 dval
几乎是垃圾(不完全是:你可以理解根据 ival
)
不是重复的,但有趣的阅读:Why do we need C Unions?