具有靈活數組成員的結構顯然不是要聲明,而是與指向該結構的指針結合使用。聲明靈活數組成員時,必須至少有一個其他成員,並且靈活數組成員必須是該結構中的最後一個成員。靈活的數組成員是否真的有必要?
比方說,我有一個看起來像這樣的:
struct example{
int n;
int flm[];
}
然後使用它,我必須聲明指針和使用malloc保留內存結構的內容。
struct example *ptr = malloc(sizeof(struct example) + 5*sizeof(int));
也就是說,如果我想我的FLM []數組保存五個整數。然後,我就可以用我的結構 這樣的:
ptr->flm[0] = 1;
我的問題是,我不應該能夠只使用一個指針,而不是這個?它不僅可以兼容C99之前的版本,而且可以在有或沒有指向該結構的指針的情況下使用它。 考慮到我已經不得不使用malloc與FLM,我不應該只是能夠做到這一點?
考慮這個示例結構的新定義;
struct example{
int n;
int *notflm;
}
struct example test = {4, malloc(sizeof(int) * 5)};
我甚至可以使用替換方式相同的柔性陣列成員:
這會還工作嗎? (提供上面的示例定義notflm)
struct example test;
test.n = 4;
notflm = malloc(sizeof(int) * 5);
[C中的靈活數組成員可能重複?](http://stackoverflow.com/questions/246977/flexible-array-members-in-c-bad)。靈活的數組是C99的一部分;指針不是也可能有可移植性問題。 –
主要區別在於靈活的數組成員允許您在一個連續的塊中分配整個結構。如果你想複製結構,只需計算它的大小並做一個副本。而用指針,你必須複製結構本身,但也複製內部數組。 –
@TedHopp用什麼可以想象的方式,你可能會認真地說,指針不是C99的一部分? –