当我们进行结构型铸造时实际发生了什么?

时间:2015-04-29 02:44:44

标签: c struct casting

这里(how to cast from one type to another in c)我们有几乎相同的问题,但没有解释结构类型转换是如何工作的。

#include <stdio.h>
#include <ctype.h>

typedef struct {
  int Type;
  int Type2;
}foo;

typedef struct {
  char cData[40];
}bar;

int main()
{
  bar b1;
  strcpy(b1.cData,"11"); 
  (struct foo *) &b1;  // What is going on here? What have changed at this point?
  return 0;
}

我们有不同的尺寸 - sizeof(foo)&gt; sizeof(bar)。那么铸造后会发生什么?

1 个答案:

答案 0 :(得分:2)

您无法将一种结构类型转换为另一种结构类型。你只能将一个指针转换成一个结构类型指向另一个结构类型,在这种情况下它实际上没有发生 - 它只是一个内存地址,它被重新解释为指向另一种类型事情。