Ich muss in C ein kurzes Programm erstellen, das Strings manipuliert, aber ich stoße immer auf seltsame Zeigerfehler. Während K & amp; R ist eine große Referenz auf die Sprache, und ich sehe es oft, wenn ich verwirrt bin, nimmt es bereits an, Sie sind ein angemessener Programmierer.
Der Dozent, der uns das Programmieren beibringt, sagte, dass gute Programmierer schöne Diagramme über diese Sachen machen, aber ich habe keine Ahnung, wie ich das machen soll. Kannst du ein gutes Buch oder Vorträge dazu empfehlen?
Danke, ich werde jede Antwort, die ich bekomme, schätzen.
Eines der nützlichsten Dinge, die ich einmal getan habe, war meine Anwendung Zeichnen Sie die Graphen ...
In einer Anwendung, die eine komplizierte Datenstruktur hatte, die auf den Job spezialisiert war (Standard-Hashtabelle hat in diesem Fall nicht getan ;-) Ich hatte meine Anwendung ein ".dot" -Skript ausgeben, das Punktwerkzeug von graphviz könnte analysieren.
Dies geschah, indem eine Dump-Routine (okay, Methode, es war C ++) den .dot-Header
ausgab %Vor%ging dann meine Datenstruktur und schrieb dann die Fußzeile
%Vor%In der Struktur walk hat er jeden Zeiger mit
geschrieben %Vor%Dabei war Quelle die Speicheradresse des mit O (O213435354) vorbereiteten Referenzierungsobjekts, und Ziel war das Objekt, auf das im selben Format verwiesen wurde.
Am Anfang jedes Objekts schrieb es auch
%Vor%mit ... als Objektdaten.
Immer wenn die Anwendung in einem "interessanten" Zustand war, habe ich den Graph gelöscht und dann das Punktwerkzeug von graphviz verwendet, um es zu visualisieren. Ich habe sehr viel Zeigerfehler ziemlich leicht auf diese Weise gefunden, das Auge wird gebaut, um regelmäßige Strukturen in Linien zu sehen ...
Übrigens verwende ich immer noch graphviz , da es ziemlich nett ist, & amp; editieren Sie Graphen mit dem Texteditor und lassen Sie das Werkzeug danach visualisieren. Wenn ich Grafiken für ein Powerpoint-verwöhntes Publikum verkleiden muss, lade ich sie auf meinen Mac in OmniGraffle . (Und meine PC-Mitarbeiter glauben, dass ich einige Superhelden-Kräfte habe, weil ich mit dieser Kombination Graphen 10-mal schneller produziere, wenn sie Visio verwenden)
Ich stimme dem Vorschlag zu, sie zuerst auf Papier zu zeichnen und dann, wenn Sie das Bedürfnis haben, können Sie eine ASCII-Version davon in den Code einfügen.
Normalerweise verwende ich diese drei Formate:
um über das Gedächtnis nachzudenken:
%Vor%um über Strings nachzudenken:
%Vor%um über Bits in einem Wort nachzudenken:
%Vor%Ich habe auch für endliche Automaten etwas Ähnliches gemacht, aber sie waren tendenziell zu komplex (und zeitaufwändig), weshalb ich den Graphviz-Code jetzt direkt in einen Kommentar einbettete. Selbst wenn man nicht über GraphViz Bescheid weiß, sollte es leicht zu erraten sein, wie man das FSM-Diagramm zeichnet.
%Vor%Diese decken die meisten Diagramme ab, die ich brauche. Für komplexere verwende ich GraphViz oder OpenOffice Draw.
Das typische Speichermodell für C ist, dass Speicher eine Menge von Boxen ist; Jede Box ist 1 Byte breit. Jede Box hat eine Adresse in hexadezimaler Schreibweise. Ein Zeiger ist eine Variable, die eine Adresse enthält.
In Bezug auf Bücher / Vorträge suchen Sie nach einem grundlegenden Computer-Organisation und Architekturbuch.
Ich habe diese drei Bücher benutzt; Ich ordne sie durch "abnehmende Verständlichkeit" an. Der Klassiker ist der letzte von Patterson und Hennessy, aber ich finde ihn am wenigsten lesbar. YMMV.
Fragen Sie nach Werkzeugen, die Ihnen beim Zeichnen von Diagrammen helfen oder was die Diagramme darstellen sollen? Ich würde empfehlen, nur ein Stück Papier und Bleistift für alles zu verwenden, was Sie tun, um zu versuchen, dies selbst zu verstehen; Sie brauchen keine ausgefallenen Werkzeuge.
Wenn Sie wissen möchten, wie Zeiger funktionieren und was die Diagramme bedeuten, habe ich gefunden dieses Handout nach dem Googlen, das wie ein anständiges Tutorial aussieht.
Gute Programmierer machen keine "netten" Diagramme - sie machen ungepflegte, unleserliche, die ihren Zwecken dienen. Kritzeln Sie einfach, was Sie brauchen, auf jeder verfügbaren Oberfläche. Und wage es nicht, die "richtigen" Formen zu zeichnen - ein Ex-Kollege von mir hat einmal gesagt, dass eine Diagrammmethodik nicht wert wäre, wenn man die Diagramme nicht auf der Rückseite einer Kippe zeichnen könnte UK Leute) Paket.
Ein einfacher Weg ist es, die Erinnerung als eine riesige "Leiter" zu zeichnen. Jede Box in der Ladder repräsentiert eine Adresse im Speicher. In das Feld tippen Sie die Daten ein und daneben tippen Sie die Adresse ein. Etwas wie das:
Erfahren Sie auch, wie der Debugger funktioniert, er kann Ihnen oft den Inhalt von Zeigern, Variablen usw. zeigen.
Dies trifft nur auf diejenigen zu, die mit dem Inneren der Maschine vertraut sind, aber ein Trick ist, eine "falsche" Speicheradresse in meine Diagramme zu schreiben, damit sie realistisch aussieht. Was ich meine, ist dies:
%Vor%Erraten Sie, welche Variable den Zeiger hat, und welcher hat den Wert? Eigentlich schreibe ich normalerweise die Adresse unter (oder über) B's Box, um zu zeigen, wo es ist. Und dann werde ich eine andere (sehr unterschiedliche) gefälschte Nummer aufstellen, um zu zeigen, dass A auch irgendwo liegt. Dies ist hilfreich, wenn Sie gerade erst anfangen. Später gewöhnt man sich an all diese Zeiger Zeug.
Verwenden Sie einen quadratischen Karton (Quadrille anstelle von Graphen) und einen anständigen Stift *, wenn Sie möchten, dass Ihre Diagramme schön aussehen. Auch nützlich für die Darstellung von Speicherzellen, Buchstaben in Strings und so weiter. Sie können Quadrille Moleskine sogar erhalten, wenn Sie gleichzeitig hip und quadratisch sein möchten.
*** Ich mag uni shalaku dx 0.5, da es den Feeder-Knopf an der Seite hat, so dass du deinen Griff nicht verschieben musst, um mehr Blei zu bekommen.
Der beste Weg, Ihr Problem zu visualisieren, besteht darin, Ihren Code zu debuggen. und konzentriere dich auf deine Variable. Es wird Ihnen nicht nur einen Einblick in Ihren Code geben, sondern Sie können auch ein exaktes Diagramm des Codes erstellen, den Ihr Dozent Ihnen gesagt hat.
Vielleicht möchten Sie Gustave Duartes Blog hier sehen. In seinen Posts zeichnet er oft Diagramme von Erinnerungen und dergleichen. Dafür verwendet er Visio und ich finde die Ergebnisse ziemlich ordentlich.
Es gibt nicht viele Werkzeuge, die den Stil von Speicherkarten zeichnen, auf die sich Ihr Professor bezieht.
Die Idee, die er zu vermitteln versucht, ist, dass wenn Sie Anfänger in C sind, die Verwendung von Zeigern und Arrays Sie sehr verwirrt. Was zielt auf was? Zeigen diese beiden Zeiger auf dasselbe? Auf welche Zellen des String-Arrays bezieht sich jeder Index usw.?
Erfahrene Programmierer haben ein geistiges Bild davon. Mit Erfahrung, wirst du es auch tun. Bis dahin ist die Idee, dass Sie etwas auf Papier zeichnen könnten, um diese Dinge zu verstehen, anstatt alles in Ihrem Kopf zu haben.
Ich stimme zu, dass K & amp; R nicht als ein Lehrbuch gedacht ist und daher diese Visuals nicht hat.
Sie können ein Beispiel für diese Diagramme in Folien sehen, die ich ' für ein C-Tutorial gemacht