Quoting from the C-std section 6.7.2.1,
struct s { int n; double d[]; };
This is a valid structure declaration. I am looking for some practical use of this kind of syntax. To be precise, how is this construct any more or less powerful than keeping a double* as the 2nd element? Or is this another case of ‘you-can-do-it-in-multiple-ways’?
Arpan
The C FAQ answers precisely this question. The quick answer is that this structure will include the
doublearray inside the structure rather than a pointer to an array outside the structure. As a quick example, you could use your structure as in this example:And so on – the size of the array you care about is included in the allocation, and then you can use it just like any array. Normally such a type contains the size as part of the structure, since using the
+trick to skip through an array of typeswill be necessarily complicated by this situation.To your added question ‘how is this construct any more or less powerful than keeping a [pointer] as the 2nd element?’, it’s no more powerful per se, but you don’t need to keep a pointer around, so you would save at least that much space – also when you are copying the structure, you would also copy the array, rather than a pointer to an array – a subtle difference sometimes, but very important other times. ‘You-can-do-it-in-multiple-ways’ is probably a good explanation, but there are cases where you would specifically want one design or the other.