我无法理解以下代码的工作方式:
#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。我在哪里出错?
答案 0 :(得分:2)
浮点数和整数以不同的二进制表示形式存储。当您将float
强制转换为int
时,反之亦然,编译器会为您代劳。但是在您的情况下,您正在将int*
转换为float*
,所以您正在修改具有错误值的浮点数,因为二进制表示未得到转换。