【发布时间】:2013-03-29 07:27:46
【问题描述】:
我看到了如下代码。
typedef struct abc {
int a;
char b;
float c;
} abc;
int main()
{
abc *ab;
int *i;
i = (int*)malloc(sizeof(int));
*i = 0;
ab = (abc*) i;
return 0;
}
倒数第二行ab = (abc*) i;,代码试图做什么?
如果我们要设置ab->a的值,那为什么要这样,而不是:
ab->a = (int)i;
如果ab = (abc*) i; 更新ab->a 的值,那么其他两个结构成员如何在不独占初始化的情况下初始化?
【问题讨论】:
-
它尝试做什么?或者它做什么。?它将
i的地址转换为与abc *指针类型“兼容”,然后将该地址存储在ab指针中。然后它立即对该强制转换不做任何事情,返回零,并泄漏在main()的第三行分配的内存。 -
你在问为什么混淆代码以一种混淆的方式做事?
ab = (abc*)malloc(sizeof (int)); ab->a = 0;会产生与这个疯狂代码相同的效果,但同样毫无意义。 -
我想知道为什么这被否决了。
标签: c casting struct initialization