By itself, arrays in C are not dynamic and never will be. O yes there are those local variables and thus local arrays that are allocated dynamically, whenever a routine starts, but you should recognize that, IN THE MIDDLE OF THE ROUTINE, you cannot just suddenly change the size of an array. You really DO need to simulate it. There is no way in ANSI C's grammar for you to declare a truly dynamic variable or array. C++ is another story...
Fortunately we can easily simulate a dynamic array in C. For one thing, C makes little distinction between arrays and pointers. Since we are using a pointer to store the address of the piece of memory we are using as a dynamic array, we can use it as if it were the array itself. In the above example, you can refer to test[0].number, test[1].number, test[n].number and the compiler will generate correct code. Care must be taken of course, because the compiler cannot know the limits of the array.
"Information has a tendency to be free. Which means someone will always tell you something you don't want to know."