我无法理解以下代码是如何工作的:
#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.我哪里错了?
浮点数和整数存储有不同的二进制表示。当你将float
转换为int
或反之时,编译器会为你处理这个问题。但在你的情况下,你将int*
转换为float*
,因此你正在修改一个具有错误值的浮点数,因为二进制表示没有被转换。