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.

14voto

Dan Lenski Punkte 72055

Hier ist eine etwas andere, aber aufschlussreiche Sichtweise, warum viele Funktionen von C sinnvoll sind: http://steve.yegge.googlepages.com/tour-de-babel#C

Im Wesentlichen basiert die standardmäßige CPU-Architektur auf der Von-Neumann-Architektur, und es ist enorm nützlich, auf einem solchen Rechner auf den Speicherort eines Datenelements verweisen und damit arithmetische Operationen ausführen zu können. Wenn Sie irgendeine Variante von Assemblersprache kennen, werden Sie schnell erkennen, wie entscheidend dies auf niedriger Ebene ist.

C++ macht Zeiger ein wenig verwirrend, da es sie manchmal für Sie verwaltet und ihre Auswirkungen in Form von "Referenzen" verbirgt. Wenn Sie reines C verwenden, ist der Bedarf an Zeigern viel offensichtlicher: Es gibt keine andere Möglichkeit, um Call-by-Reference zu implementieren, es ist die beste Methode, um einen String zu speichern, es ist die beste Methode, um durch ein Array zu iterieren, etc.

12voto

MrZebra Punkte 11337

Eine Verwendung von Zeigern (ich werde Dinge, die bereits in anderen Beiträgen behandelt wurden, nicht erwähnen) besteht darin, auf den Speicher zuzugreifen, den Sie nicht zugewiesen haben. Dies ist für die PC-Programmierung nicht sehr nützlich, wird jedoch in der eingebetteten Programmierung verwendet, um auf mappendes Hardwaregeräte zuzugreifen.

Zurück in den alten DOS-Tagen konnte man auf den Videospeicher der Grafikkarte direkt zugreifen, indem man einen Zeiger deklarierte:

unsigned char *pVideoMemory = (unsigned char *)0xA0000000;

Viele eingebettete Geräte verwenden diese Technik immer noch.

0 Stimmen

Kein Grund, einen Zeiger zu benutzen - eine strukturähnliche Spanne, die auch die Länge enthält, ist viel angemessener. Heutzutage ist es gsl::spanund bald wird es std::span sein.

11voto

warren Punkte 30258

Im Wesentlichen sind Zeiger Arrays (in C / C++) - sie sind Adressen im Speicher und können bei Bedarf wie ein Array abgerufen werden (in "normalen" Fällen).

Da sie die Adresse eines Elements sind, sind sie klein: Sie nehmen nur den Platz einer Adresse ein. Da sie klein sind, ist es günstig, sie an eine Funktion zu übergeben. Und dann ermöglichen sie dieser Funktion, am tatsächlichen Element zu arbeiten, anstatt an einer Kopie.

Wenn Sie eine dynamische Speicherzuweisung durchführen möchten (zum Beispiel für eine verkettete Liste), müssen Sie Zeiger verwenden, da dies der einzige Weg ist, Speicher aus dem Heap zu beziehen.

8 Stimmen

Ich denke, es ist irreführend zu sagen, dass Zeiger Arrays sind. Tatsächlich sind Array-Namen Konstante Zeiger auf das erste Element des Arrays. Nur weil Sie einen beliebigen Punkt so zugreifen können, als ob es sich um ein Array handelt, bedeutet das nicht, dass es so ist... Sie könnten einen Zugriffsverletzung erhalten :)

2 Stimmen

Zeiger sind keine Arrays. Lesen Sie Abschnitt 6 der comp.lang.c FAQ.

0 Stimmen

Zeiger sind wirklich keine Arrays. Auch rohe Arrays sind nicht mehr allzu nützlich - sicherlich nicht nach C++11 und std::array.

10voto

Ash Punkte 58914

Zeiger sind in vielen Datenstrukturen wichtig, deren Design die Fähigkeit erfordert, einen "Knoten" effizient mit einem anderen zu verknüpfen oder zu verketten. Man würde keinen Zeiger "wählen" über beispielsweise einen normalen Datentyp wie float, sie haben einfach verschiedene Zwecke.

Zeiger sind nützlich, wenn Sie eine hohe Leistung und/oder einen kompakten Speicherplatzbedarf benötigen.

Die Adresse des ersten Elements in Ihrem Array kann einem Zeiger zugewiesen werden. Dadurch können Sie dann direkt auf die zugewiesenen Bytes zugreifen. Der eigentliche Sinn eines Arrays ist es jedoch, dass Sie das nicht tun müssen.

9voto

Jason Punkte 197

Ein Weg, um Zeiger über Variablen zu verwenden, besteht darin, den benötigten doppelten Speicher zu eliminieren. Zum Beispiel, wenn Sie ein großes komplexes Objekt haben, können Sie einen Zeiger verwenden, um auf diese Variable zu zeigen, für jede Referenz, die Sie machen. Mit einer Variable müssen Sie den Speicher für jede Kopie duplizieren.

0 Stimmen

Das ist ein Grund, Verweise (oder höchstens - Verweisumhüllungen) anstelle von Zeigern zu verwenden.

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