我正在学习 C 并试图理解类型转换和内存分配。
我写了一个小代码,并认为它失败了。
#include <stdio.h>
#include <stdlib.h>
struct A {
int x;
int y;
};
int main()
{
int *i;
float *f;
struct A *ptr;
i = (int *)malloc(4);
if(i==NULL) {
printf("\n failed to allocate memory \n");
return 1;
}
*i=10;
printf(" %d \n",*i);
f = (float *)i;
*f = 10.2;
printf(" %f \n",*f);
ptr = (struct A *)f;
ptr->x=10;
ptr->y=20;
printf(" %hd \n",ptr->x);
printf(" %hd \n",ptr->y);
}
我预计这段代码会失败,因为我只分配了 4 个字节的内存并类型转换了相同的指针以指向浮点数(4 个字节)和具有 8 个字节的结构。我虽然它给出了段错误,但它打印出没有任何问题的值。
有什么我想念的吗。