C 编程 - 意外的输出

标签 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。我哪里出错了?

最佳答案

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

关于C 编程 - 意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138809/

相关文章:

c - 将指针转换为 int 以从 C 中的 int 函数返回是否安全?

c# - .Net - 转换或转换装箱字节?,简而言之?还是整数?到整数?

在结构中为输出调用不同的变量

集群上带有 SLURM 的 C 库函数 exit()

c - 父进程创建子进程并且父进程和子进程运行相同程序不同代码的程序

在 C 中创建定时器

c - 使用分而治之法检测重复项 - 归并排序

java - 将父类(super class)转换为子类

sql-server - SQL Server : splitting a row into multiple rows from OUTPUT clause

C++单元测试检查输出是否正确