Ich habe den folgenden Code.
%Vor%Und die Übung sagt:
Zeichnen Sie ein Bild der Datenstrukturen a, b, c und d (mit Inhalt), wo Sie sehen können, was zugeteilt wurde und verwenden Sie Pfeile, um zu zeigen, wie Zeiger sind gesetzt.
Meine Lösung ist:
%Vor%Jedoch wurde meine Lösung nicht akzeptiert und die Antwort war " reservierter Speicher für einen Zeiger auf b, c, d, aber nicht a ". Kann mir jemand erklären, was das bedeutet?
Es ist eine leicht kryptische Antwort, aber ich denke, die Beschwerde ist, dass das Array a
nicht auf diese Daten zeigt; it enthält die Daten.
Dies könnte also erforderlich sein (ohne den Zeigerpfeil):
%Vor%Der Name eines Arrays kann als Zeiger verwendet werden, hat aber immer noch eine etwas andere Bedeutung.
Ich würde sie so zeichnen:
%Vor% Beachten Sie, dass die a
unterhalb des gesamten Arrays und nicht neben einem Pfeil liegt. Dies soll unterstreichen, dass a
ein ganzes Array ist, das die Zeichenfolge selbst enthält, nicht nur einen Zeiger. Dies zeigt, dass Sie den Unterschied zwischen einem Array und einem Pointer erkennen.
Der Inhalt des Speichers, der nach d
zeigt, wird nicht tatsächlich bestimmt. Es muss etwas Müll enthalten sein, der von malloc()
auf c
Ich denke, Sie haben ziemlich genau recht:
%Vor%Ausgaben:
%Vor% Hinweis: Obwohl strlen()
nach dem Zeichen NULL
sucht, um in der Lage zu sein, ein Array von Strings und Zählern zu durchlaufen, wird das Vorkommen von NULL
selbst nicht zu dem hinzugefügt Endsumme, deshalb meldet es 5 statt 6 Zeichen.
Da Ihre Antwort nicht akzeptiert wird, gibt es wahrscheinlich eine andere Form der Repräsentation, die Ihr Lehrer von Ihnen erwartet hat, für das Array a
. Vielleicht sind Sie daran interessiert, mit Ihren Kollegen darüber zu sprechen, aber ich denke nicht Es ist fair zu sagen, dass Sie eine falsche Antwort gegeben haben.
Tags und Links c pointers memory-management char