A static array has a fixed size chosen when it is created, and that size never changes. A dynamic array can grow and shrink at runtime, resizing itself as you add or remove elements.
A dynamic array still stores its elements in one contiguous block. When that block fills up, the array allocates a larger one and copies the elements across. You get flexibility, and you pay for it with an occasional resize.
Use a static array when you know the count ahead of time and want zero overhead. Use a dynamic array, like a Python list or a Java ArrayList, when the size is unknown or keeps changing. Access stays O(1) for both. Only the growth behavior differs between them.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
If you hold a pointer to an element in a C++ vector, what can a resize do to it?The elements move to a new block, so old pointers and iterators dangle. Suggest holding an index instead, or reserving capacity up front.
When would you pick a static array even though a dynamic one would also work?Mention a known, fixed count, no spare capacity wasted, and no resize pause in code where latency matters.
What you can say
A static array has a fixed size chosen when it's created, and a dynamic array can grow and shrink at runtime as you add or remove elements.
A dynamic array still stores its elements in one contiguous block, just like a static one.
When that block fills up, it allocates a larger block and copies all the elements across.
Access by index stays O(1) in both, so the only real difference is how they handle growth.
When the size is unknown or keeps changing, I'd use a dynamic array, like a Python list or a Java ArrayList.
If I know the count ahead of time, I'd pick a static array, because it never pays for a resize and carries zero overhead.
Weak answers to avoid
Says a dynamic array is a linked listA dynamic array is still one contiguous block, and that is why indexing stays O(1). Say so, then explain how it grows by allocating a bigger block and copying.
Claims dynamic arrays have slower accessIndexing is O(1) in both. Only the growth behavior differs, so keep access speed out of the trade-off.
Treats growth as freeEach resize allocates a bigger block and copies every element. Name that cost, then say resizes are rare enough that appends stay cheap on average.
Gives definitions but never says when to use eachThe interviewer wants you to make the choice. Static when the count is known and you want no overhead, dynamic when the size is unknown or keeps changing.
Interview lens
Likely follow-ups, what you can say, and the weak answers to avoid.