2010-12-04 5 views
14

Ich bin derzeit ein Neuling in der Schule, Schwerpunkt in CS. Ich bin gerade fertig mit meiner "Intro to Computer Programming" -Klasse. Ich mag es und fühle mich, als würde ich ein gutes Stück lernen.Tutorial über C-Zeiger und Arrays aus einer Java-Sicht

Vor ein paar Tagen habe ich Joels The Peril Of Java Schools gelesen. "Eine verknüpfte Liste?" Ich dachte: "Die sind nicht einmal schwer. Wir haben eine ganze Reihe von denen gemacht, die bereits in der Klasse sind, in der ich gerade bin." Das ist richtig, denn in Java sind sie nicht so schwer. Aber irgendwie habe ich versucht, in C einen Versuch zu geben.

Und es ist SO HART!

Joel hatte Recht, ich denke ... Java beschäftigt sich mit so vielen kleinen Dingen, dass es für dich ist, dass es wirklich nicht so schwer ist. Aber ich bin entschlossen, die Java-tude meiner Schule zu überwinden und zu lernen, wie man diese dang-verknüpfte Liste in C schreibt.

Also denke ich, statt zu versuchen, viele und viele kleine, kleine Fragen zu stellen, frage ich, tut es Kennt jemand ein gutes (& kostenloses) Online-Tutorial zum Lernen von C? Genauer gesagt, lernen, wie man mit Zeigern umgeht, und all diese Symbole (&, *, **, [] und wie sie zusammenarbeiten) Ich würde gerne denken, dass ich Java bereits ziemlich gut beherrsche, daher brauche ich keine Tutorials wie man ein "Hello, World!" Programm. Aber dann bin ich definitiv nicht bereit, irgendwelche super-fortgeschrittenen C- oder C++ -Instrumente zu entwickeln, denn alles, was ich weiß, ist Java.

Jede Hilfe wird geschätzt!

+9

Das Problem mit Online-Tutorials ist, dass sie fast immer von sehr schlechter Qualität sind und schädliche technische Fehler und andere Fehler haben, oder allgemein schlechte Coding empfehlen (Ich bin nicht so vertraut mit Online-C-Ressourcen wie ich mit C++ bin, aber für C++ gibt es keine guten, kostenlosen Online-Tutorials). Wenn Sie C lernen wollen und wie Zeiger und Arrays und andere Aspekte der Sprache funktionieren, tun Sie sich einen Gefallen und [erhalten Sie ein gutes Anfängerbuch] (http://stackoverflow.com/questions/562303/the-definitive-c- Buchführer und -liste). –

+1

Ich weiß nicht, dass es etwas gibt, wenn man "von einem Java - Standpunkt" aus spezifiziert, weil Java keine offensichtliche Analogie zu einem Zeiger hat ... wahrscheinlich wollen Sie nur einen [guten allgemeinen Zeigerführer] (http : //stackoverflow.com/q/4016765/2509), und dort [sind] (http://stackoverflow.com/questions/5727/what-are-the-barriers-to-understanding-pointers-and-what-) can-be-done-to-bewise) Fragen hierzu [bereits] (http://stackoverflow.com/questions/2271490/c-pointers-good-tutorials). – dmckee

+0

Obwohl [Alf Steinbachs Tutorials für Zeiger] (https://docs.google.com/fileview?id=0B2oiI2reHOh4M2MzNzYwYzQtMGZkNC00NTljLWJiM2UtOGI0MmRkMTMyZGY4) hilfreich sein könnte. Es ist gut geschrieben, aber konzentriert sich auf C++, nicht C. Sie brauchen trotzdem ein gutes Buch. –

Antwort

6
+1

Besser als Kommentar. – dmckee

+0

@dmckee Art von schwer, eine Liste von Links in einem Kommentar zu präsentieren hmm? –

+0

Ich mache es die ganze Zeit. Mein Kommentar zu dieser Frage enthält 3 Links, und manchmal mache ich noch viel mehr. Verwenden Sie die Inline-Syntax '[' text '] (' link ')'. Es gibt natürlich die Längenbeschränkung, aber Sie können eine Menge in 600 Zeichen bekommen. – dmckee

3

Überprüfen Sie, ob Ihr Studienplan Systemprogrammierung erfordert. Es ist normalerweise ein 300-Level-Sophomore-Kurs, und ich bin für das nächste Semester eingeschrieben. Es beschäftigt sich intensiv mit C + GCC in Unix.

Überprüfen Sie Ihre CS Dept-Bibliothek, falls eine existiert. Ich nahm eine Kopie von K & R auf, um während der Winterpause zu arbeiten.

+2

Es gibt keinen besseren Rat, als eine Kopie von K & Rs C-Buch aufzuheben. Es ist klein, prägnant und klar. – gbc

+1

K & R bezieht sich auf dieses Buch: Die Programmiersprache C von Kernighan und Ritchie - http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/ref=sr_1_1?ie=UTF8&qid=1291498331&sr= 8-1 –

1

This ist für C++, nicht C; Aber bis zu Kapitel 3.7 oder so spricht man über Dinge auf der Maschinenebene in einer Weise, die für Möchtegern-C-Programmierer nützlich ist.

+0

Ich habe diese Website vorher nicht gesehen, aber nach einem kurzen Blick würde ich argumentieren, dass es nicht als gute C++ - Ressource empfohlen werden sollte. Es werden keine Ausnahmen besprochen, daher werden auch RAII- oder Smart-Pointer nicht behandelt.Es verzichtet auf die STL-Container, die "einfacher zu verwenden" sind. Anscheinend hat der Autor nicht viel C++ programmiert, weil er sagt, "weil die Standard-Bibliothekskennungen so häufig verwendet werden, ist es lästig, jedes Mal, wenn wir auf eine davon verweisen wollen," std :: 'sagen zu müssen." Ich weiß nicht, was das Buch über Zeiger sagt, aber ich würde es nicht glauben. –

+0

@James es geht später durch Ausnahmen, und zeigt Verwendung des Hüllkurvenkörperidioms für die Verwaltung polymorpher Klassen. Konzepte werden vorgestellt, wenn sie benötigt werden. Ich finde es auch nervig, jedesmal 'std ::' zu schreiben, und das gerade, weil ich viel geschrieben habe. Der halbe Punkt, ein echtes Namespace-System zu haben, besteht darin, die Präfixe löschen zu können, wenn es * keinen Konflikt verursacht, IMO. Ernsthaft, bitte verurteile es nicht so schnell. –

0

Es gibt zahlreiche Führer im Internet für das Lernen von Zeigern. Hier ist eine: http://pweb.netcom.com/~tjensen/ptr/pointers.htm die ich benutzt habe.

Ich werde Ihnen auch dieses Buch vorschlagen: Hacking, the Art of Exploitation 2nd Ed.

Dieses Buch macht Sie nicht zu einem "Hacker". Nichts als viel Reverse Engineering/Studium von Binärcode, Versuch und Irrtum usw. wird das tun. Es stellt Ihnen jedoch vor, wie Sie mit diesen Dingen beginnen, und das beruht auf einem grundlegenden Verständnis von C, einschließlich Zeigern. Seine Einführung in Assembly/C ist eine der besten, die ich je gesehen habe, da es Sie durch mehrere C-Beispiele führt und Sie untersuchen, was mit gdb, einem Debugging-Tool für Befehlszeilen, passiert. Auf diese Weise können Sie das C sehen und die Baugruppe sehen. Dies beinhaltet ein grundlegendes Verständnis dessen, was Zeiger sind.

Dieses Buch wird als Nebeneffekt eine Einführung in den Stapel und den Heap, Datenstrukturen usw. geben. Kurz gesagt, das Lesen der Intro-Abschnitte wird Ihnen eine Menge Nutzen für den Rest Ihres Kurses geben.