3
下面的代碼有效嗎?在另一個結構中具有一個靈活數組成員的結構
struct foo {
int a;
int b[];
};
struct bar {
int c;
struct foo d;
};
struct bar *x = malloc(sizeof(struct bar) + sizeof(int [128]));
它似乎確定給我,但我有點懷疑,因爲如果我這樣做編譯器不抱怨:
struct bar {
struct foo d;
int c;
};
@Shahbaz:否,'INT B []'是*不*一樣'INT * B'。這個構造被稱爲*靈活數組成員*。 http://www.c-faq.com/struct/structhack.html – jamesdlin
@ jamesdlin,不知道!但這似乎是一個可怕的想法。他們怎麼能使它成爲標準? – Shahbaz
@Shahbaz這不是一個可怕的想法,如果人們錯誤地使用它,那就很危險。在成爲標準之前,將長度爲1的數組作爲'struct'的最後一個成員用於此目的是一種常見的攻擊。 gcc很早就接受了長度爲0的數組作爲靈活的數組成員。 –