C编程 - 意外输出

问题描述 投票:-1回答:1

我无法理解以下代码是如何工作的:

#include<stdio.h>

int main() {

 int i = 100;
 int *a = &i;
 float *f = (float *)a;

 (*f)++;

 printf("%d", *a); //getting some garbage value

}

'f'指向与'a'相同的内存位置。所以,(*f)++应该将i的值增加到101.我哪里错了?

c casting output
1个回答
2
投票

浮点数和整数存储有不同的二进制表示。当你将float转换为int或反之时,编译器会为你处理这个问题。但在你的情况下,你将int*转换为float*,因此你正在修改一个具有错误值的浮点数,因为二进制表示没有被转换。

© www.soinside.com 2019 - 2024. All rights reserved.