Frage

Das war ein Arbeitsvermittlung Interview, das ich konfrontiert. Sie fragten, ob wir Array realloc kann, ich sagte ja. Dann fragten sie - dann, warum wir brauchen Zeiger als die meisten Menschen Grund geben, dass es Speicherplatz verschwendet. Ich konnte nicht in der Lage befriedigende Antwort geben. Wenn eine Stelle keine befriedigende Antwort geben kann, werde ich verpflichtet. Bitte erwähnen Sie jede Situation, in der die obige Aussage widersprechen kann.

Danke.

War es hilfreich?

Lösung

Sie können nur ein Array neu zuweisen, die dynamisch zugewiesen wurde. Wenn es statisch zugeteilt wurde, kann sie nicht neu zugewiesen werden [sicher]. *

Pointers halte Adressen von Daten im Speicher. Sie können dynamisch die neuen / löschen Operatoren in C ++ und malloc / free in C unter Verwendung zugewiesen, ausgeplant und neu zugewiesen werden.

Ich würde empfehlen, dass Sie lesen Die Programmiersprache C von Kernighan und Ritchie und einem soliden C ++ Text wie C ++ vom Boden up von Herbert Schildt.

dynamischen Speicher verwenden, Zeiger Offsets, etc. sind alle grundlegenden diese beiden Sprachen zu verwenden. Nicht zu wissen, wie sie funktionieren und warum sie existieren wird ein wahrscheinlicher Grund für potentielle Arbeitgeber Sie auszuschlagen.

* der Compiler sollte nicht können Sie alles umverteilen, die statisch zugewiesen worden ist, aber wenn es der Fall ist, wird das Verhalten nicht definiert

Andere Tipps

Die Formulierung ist ein bisschen seltsam, aber mir scheint es, wie die Interview-Frage eine offene Frage war entworfen, um Ihnen zu erklären zu bekommen, was Sie wissen über Arrays, Zeiger, dynamische Speicherzuweisung usw. Wenn ich der Interviewer war ich Würd die Kandidaten wollen die Unterschiede zwischen int *a = malloc(10 * sizeof(int)); und int a[10]; zu artikulieren. Die Followup Frage ist nicht sehr gut formuliert, aber es war wahrscheinlich ein Versuch, den Kandidaten in der Richtung der Differenz zwischen einem Zeiger und einem Array stupste und den Gedanken Einstellung aus.

OK. Sie können nicht ein Array realloc, die statisch deklariert wurde. Der Zweck der Verwendung von Zeigern (statt statisch deklarierten Array), wäre so, dass Sie den Raum realloc können. Ich denke, sein technisch korrekt, Sie, indem ein Zeiger auf eine statisch definierte Array realloc konnte, aber ich würde nicht wollen. Das Verhalten ist nicht definiert, wenn der Zeiger auf Speicher, die nicht von malloc zugeordnet wurde.

ich nicht wirklich verstehen, wie Zeiger „Abfälle Speicher“ verwendet wird. Die realloc Funktion: -

void *realloc(void *ptr, size_t size);

nimmt einen Zeiger auf den Speicher als Parameter zu ändern. Auch gibt es viele weitere Anwendungsmöglichkeiten für Zeiger als dynamischer Speicher, als Verweise zum Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top