【发布时间】:2018-09-02 16:13:35
【问题描述】:
我无法理解以下代码的工作原理:
#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。我哪里出错了?
【问题讨论】:
-
这个程序的行为很大程度上取决于
floats 在内存中的表示方式(很可能根据 IEEE 754)。 -
首先,正式的回答是你所做的是违反严格的别名规则(也就是说,在
f的位置没有float指向,所以访问*f是非法的)。因此,您的程序的行为是不受约束的,它可以做任何事情。