All the basic kinds of variables, arrays, and structs introduced so far have a fixed size that is known at compile time. Fixed-size variables have many advantages; they can be laid end to end to use memory efficiently. Compiled machine code can access fixed-size variables very quickly, but fixed-size variables have a weakness. There is no way to hold an arbitrarily large data structure in fixed-sized variables. The developer must anticipate the largest problem a program will be asked to solve. Memory is wasted when a program solves a smaller problem, and a program will fail when it tries to exceed its capacity.
Imagine, for example, that a developer wants to store all the words in a book but can only make use of fixed-size variables. They could declare a two-dimensional array of
char to hold the words, but how big should the array be?
The average book has between 75,000 and 100,000 words. The developer could pick the worst-case size of 100,000 words which would...