带有三元运算符的 C void 指针
C void pointer with ternary operator
我在使用三元条件运算符时遇到空指针问题。
如果是:
int x = 5;
void * pointer = &x;
printf("x: %d \n", 1 == 1 ? (*((int*)pointer)) : (*((char*)pointer)));
它写入控制台数字 5,这是正确的 activity。但是当我将最后一行字符更改为 double:
printf("x: %d \n", 1 == 1 ? (*((int*)pointer)) : (*((double*)pointer)));
然后它写0,我不知道为什么。我知道我可以使用 if-else 代替它,但我只是好奇为什么它会这样工作。谁能帮帮我?
三元表达式的结果是两个分支的公共类型。如果一个分支是 int
而另一个分支是 double
那么结果也将是 double
。
并且您不打印 double
值,而是尝试打印 int
值。格式说明符和值不匹配将导致 undefined behavior.
有关详细信息,请参见例如this conditional operator reference.
您应该使用 %lf
而不是 %d
int x = 5;
void * pointer = &x;
printf("x: %lf \n", 1 == 1 ? (*((int*)pointer)) : (*((char*)pointer)));
我在使用三元条件运算符时遇到空指针问题。
如果是:
int x = 5;
void * pointer = &x;
printf("x: %d \n", 1 == 1 ? (*((int*)pointer)) : (*((char*)pointer)));
它写入控制台数字 5,这是正确的 activity。但是当我将最后一行字符更改为 double:
printf("x: %d \n", 1 == 1 ? (*((int*)pointer)) : (*((double*)pointer)));
然后它写0,我不知道为什么。我知道我可以使用 if-else 代替它,但我只是好奇为什么它会这样工作。谁能帮帮我?
三元表达式的结果是两个分支的公共类型。如果一个分支是 int
而另一个分支是 double
那么结果也将是 double
。
并且您不打印 double
值,而是尝试打印 int
值。格式说明符和值不匹配将导致 undefined behavior.
有关详细信息,请参见例如this conditional operator reference.
您应该使用 %lf
而不是 %d
int x = 5;
void * pointer = &x;
printf("x: %lf \n", 1 == 1 ? (*((int*)pointer)) : (*((char*)pointer)));