459 Stimmen

Warum Pointer verwenden?

Ich weiß, dass dies eine wirklich grundlegende Frage ist, aber ich habe gerade erst mit einigen grundlegenden C++-Programmierungen begonnen, nachdem ich einige Projekte mit Hochsprachen programmiert habe.

Grundsätzlich habe ich drei Fragen:

  1. Warum Pointer anstelle von normalen Variablen verwenden?
  2. Wann und wo sollte ich Pointer verwenden?
  3. Wie verwendet man Pointer mit Arrays?

8 Stimmen

Bereits diskutiert unter dieser Frage Hoffe, das hilft!

0 Stimmen

Eine weitere Diskussion über Pointer hier.

4 Stimmen

Für eine Liste von Büchern, siehe stackoverflow.com/questions/388242/…. Nach Java fand ich Accelerated C++ sehr nützlich.

2voto

Jim Michaels Punkte 669
  • In einigen Fällen sind Funktionzeiger erforderlich, um Funktionen zu verwenden, die sich in einer gemeinsam genutzten Bibliothek (.DLL oder .so) befinden. Dazu gehört die Durchführung von Dingen über Sprachgrenzen hinweg, wo oft ein DLL-Interface bereitgestellt wird.
  • Das Erstellen von Compilern
  • Das Erstellen von wissenschaftlichen Taschenrechnern, bei denen Sie ein Array oder Vektor oder eine String-Map von Funktionszeigern haben?
  • Der Versuch, den Video-Speicher direkt zu ändern - Erstellen Ihrer eigenen Grafikbibliothek
  • Das Erstellen einer API!
  • Datenstrukturen - Knoten-Link-Zeiger für spezielle Bäume, die Sie erstellen

Es gibt viele Gründe für Zeiger. Vor allem das C-Namensmangeln in DLLs ist wichtig, wenn Sie die Kompatibilität zwischen verschiedenen Sprachen beibehalten möchten.

2voto

Radu Chivu Punkte 1057

Im Hinblick auf Ihre zweite Frage müssen Sie im Allgemeinen keine Zeiger beim Programmieren verwenden, es sei denn, Sie erstellen eine öffentliche API.

Das Problem mit C++-Konstrukten, die die Leute im Allgemeinen verwenden, um Zeiger zu ersetzen, hängt sehr stark von dem Toolset ab, das Sie verwenden. Dies ist in Ordnung, wenn Sie die volle Kontrolle über den Quellcode haben. Wenn Sie jedoch eine statische Bibliothek mit Visual Studio 2008 kompilieren und versuchen, sie in Visual Studio 2010 zu verwenden, treten eine Vielzahl von Linkerfehlern auf, da das neue Projekt mit einer neueren Version von STL verknüpft ist, die nicht abwärtskompatibel ist. Dinge werden noch schlimmer, wenn Sie eine DLL kompilieren und eine Importbibliothek bereitstellen, die von anderen Toolsets verwendet wird, denn in diesem Fall wird Ihr Programm früher oder später ohne ersichtlichen Grund abstürzen.

Um große Datensätze von einer Bibliothek in eine andere zu verschieben, könnten Sie erwägen, der Funktion, die die Daten kopieren soll, einen Zeiger auf ein Array zu übergeben, wenn Sie nicht möchten, dass andere die gleichen Tools wie Sie verwenden müssen. Das Gute daran ist, dass es nicht einmal ein C-Style-Array sein muss, Sie können z. B. einen std::vector verwenden und den Zeiger geben, indem Sie die Adresse des ersten Elements &vector[0] übergeben und den std::vector intern verwalten.

Ein weiterer Grund, Zeiger in C++ zu verwenden, hängt wieder mit Bibliotheken zusammen. Angenommen, Sie haben eine DLL, die nicht geladen werden kann, wenn Ihr Programm läuft. Wenn Sie dann eine Importbibliothek verwenden, wird die Abhängigkeit nicht erfüllt und das Programm stürzt ab. Das ist beispielsweise der Fall, wenn Sie eine öffentliche API in einer DLL neben Ihrer Anwendung bereitstellen und von anderen Anwendungen darauf zugreifen möchten. In diesem Fall müssen Sie die DLL von ihrem Standort aus laden (normalerweise ist sie in einem Registrierungsschlüssel) und dann eine Funktion verwenden, um Funktionen innerhalb der DLL aufrufen zu können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X