C使用三元运算符的void指针

0 c ternary-operator void-pointers

我有一个与三元条件运算符一起使用的void指针的问题.

的情况下:

int x = 5;
void * pointer = &x;
printf("x: %d \n", 1 == 1 ? (*((int*)pointer)) : (*((char*)pointer)));
Run Code Online (Sandbox Code Playgroud)

它写入控制台的数字5,whitch是正确的活动.但是当我将最后一行char更改为double时:

printf("x: %d \n", 1 == 1 ? (*((int*)pointer)) : (*((double*)pointer)));
Run Code Online (Sandbox Code Playgroud)

然后写0,我不知道为什么.我知道我可以使用if-else而不是它但我只是好奇它为什么这样工作.谁能帮助我?

Som*_*ude 5

三元表达式的结果是两个分支的常见类型.在一个分支是a int和另一个分支的情况下,double结果也是一个double.

并且您不打印double值,您尝试打印int值.不匹配的格式说明符和值将导致未定义的行为.

有关更多信息,请参阅此条件运算符参考.