下面是一個符合標準的C程序(以及哪個標準)?如果它不符合(通過違反嚴格的別名規則或其他方式)對於GCC或任何其他常用的C編譯器是否是「安全的」?集合C結構與其成員之間的指針是否符合標準?
int main()
{
typedef struct {
int data;
} Type1;
typedef struct {
float data;
} Type2;
typedef struct {
Type1 type1;
Type2 type2;
} Aggregate;
Aggregate aggregate;
aggregate.type1.data = 1;
aggregate.type2.data = 2.0;
Aggregate *p_aggegregate = &aggregate;
Type1 *p_type1 = (Type1*) &aggregate;
Type2 *p_type2 = (Type2*) &aggregate;
int data1 = p_type1->data;
float data2 = p_type2->data;
return 0;
}
'p_type2'不指向類型爲Type2的對象,您如何建議使用該指針?或者你不打算使用它? – 2501
僅僅指向一個對象的指針不能訪問它。所以別名不是一個問題。 – 2501
'Type1 * p_type1 =&aggregate'和'Type2'變體是不兼容的指針轉換。 – ensc