C编程-意外输出

时间:2018-09-02 16:13:36

标签: c casting output

我无法理解以下代码的工作方式:

#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。我在哪里出错?

1 个答案:

答案 0 :(得分:2)

浮点数和整数以不同的二进制表示形式存储。当您将float强制转换为int时,反之亦然,编译器会为您代劳。但是在您的情况下,您正在将int*转换为float*,所以您正在修改具有错误值的浮点数,因为二进制表示未得到转换。