Was Sie bisher kennen (sollten):
Bisher betrachtete Datenstrukturen beanspruchen eine bestimmte Speichergröße. Diese Speichergröße ergibt sich aus der Summe aller Größen der in einer Datenstruktur enthaltenen Komponenten. Der Compiler ist in der Lage, diese Größen zu ermitteln. Die Größe einer Datenstruktur kann in C/C++ per sizeof(...) festgestellt werden. Als Parameter kann der Typ der Datenstruktur oder eine Variable dieser Struktur eingesetzt werden.

Was tun Sie, wenn Ihre Applikation eine zur Übersetzungszeit nicht bekannte Anzahl an Daten einlesen soll?
Die Ausdehnung eines Arrays kann bei einer Compilersprache nicht zur Laufzeit festgelegt bzw. verändert werden. Dies können ausschließlich Interpretersprachen. Ein Array scheidet also für die Aufnahme der Daten aus.

Der erste Lösungsschritt für dieses Problem ist sehr einfach.
Jedes Mal, wenn neue Daten eingelesen werden, lässt man dafür dynamisch Speicher reservieren und legt die Daten dort ab.

Sie erinnern sich?
Die Reservierung von Arbeitsspeicher (new oder malloc) liefert einen Zeiger auf den reservierten Speicherbereich.

Was tut man nun aber mit den Zeigern auf diese abgelegten Daten?
Wo soll man alle diese Zeiger sammeln? In einem Array vielleicht?
Da wir nicht wissen, wie viele Zeiger die Applikation zu verwalten hat, stehen wir wieder vor demselben Problem wie zuvor.