我无法理解以下代码是如何工作的:
#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 和整数以不同的二进制表示形式存储。当您将 float
转换为 int
或反之亦然时,编译器会为您处理此问题。但在您的情况下,您将 int*
转换为 float*
,因此您正在修改具有错误值的 float ,因为二进制表示没有'不会被转换。
关于C 编程 - 意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138809/