Zuhause Persönliche Finanzen Arrays und Zeiger in C ++ - Dummies

Arrays und Zeiger in C ++ - Dummies

Video: Pointers and arrays 2025

Video: Pointers and arrays 2025
Anonim

Der Name des Arrays ist ein Zeiger auf das Array selbst.. Das -Array ist eine Folge von Variablen, die im Speicher gespeichert sind. Der Array-Name verweist auf das erste Element.

Dies ist eine interessante Frage zu Zeigern: Können Sie einen Funktionsheader haben, wie zum Beispiel die folgende Zeile, und einfach sizeof verwenden, um zu bestimmen, wie viele Elemente sich im Array befinden? Wenn dies der Fall ist, muss der Aufrufer die Größe des Arrays nicht angeben.

int AddUp (int Numbers []) {

Betrachten Sie diese Funktion im Beispiel Array01 und ein main (), das sie aufruft:

void ProcessArray (int Numbers []) { cout << "innere Funktion: Größe in Byte ist" << sizeof (Zahlen) << endl;} int main (int argc, char * argv []) {int MyNumbers [] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; cout << "äußere Funktion: Größe in Bytes ist"; cout << sizeof (MeineZahlen) << endl; ProcessArray (MeineNummern); return 0;}

Wenn Sie diese Anwendung ausführen, sehen Sie Folgendes:

Außenfunktion: Größe in Bytes ist 40 Innenfunktion: Größe in Bytes ist 4

Außerhalb der Funktion weiß der Code, dass die Größe des Arrays 40 Byte beträgt. Aber warum denkt der Code, dass die Größe 4 ist, nachdem er sich innerhalb des Arrays befindet? Der Grund dafür ist, dass Sie einen Zeiger wirklich an ein Array übergeben, obwohl es so aussieht, als würden Sie ein Array übergeben. Die Größe des Zeigers ist nur 4, und so wird die endgültige cout-Zeile gedruckt.

Das Deklarieren von Arrays hat eine leichte Eigenart. Wenn Sie ein Array deklarieren, indem Sie eine bestimmte Anzahl von Elementen angeben, z. B.

int MyNumbers [5];

Der Compiler weiß, dass Sie ein Array haben und der Operator sizeof gibt Ihnen die Größe des gesamten Arrays an. Der Array-Name ist dann sowohl als auch ein Zeiger und ein Array! Wenn Sie jedoch einen Funktionsheader ohne Array-Größe deklarieren, z. B.

void ProcessArray (int Numbers []) {

, behandelt der Compiler dies einfach als Zeiger und nicht mehr. Diese letzte Zeile entspricht in der Tat der folgenden Zeile:

void ProcessArray (int * Numbers) {

Innerhalb der Funktionen, die eine Zeile deklariert, sind also die folgenden zwei Codezeilen äquivalent <: Zahlen [3] = 10; * (Zahlen + 3) = 10;

Diese Äquivalenz bedeutet, dass Sie eine externe Deklaration für ein Array verwenden, z. B.

extern int MyNumbers [];

und dann nehmen Sie die Größe dieses Arrays, der Compiler wird verwirrt. Hier ein Beispiel: Wenn Sie zwei Dateien haben, Zahlen. CPP und Haupt. CPP, wo Zahlen. cpp deklariert ein Array und main. cpp extern deklariert es (wie im Array02-Beispiel gezeigt), erhalten Sie einen Compiler-Fehler, wenn Sie sizeof aufrufen:

#include using namespace std; extern int MeineNummern []; int main (int argc, char * argv []) {cout << sizeof (MeineNummern) << endl; return 0;}

In Code:: Blocks gibt der gcc-Compiler diesen Fehler:

Fehler: ungültige Anwendung von 'sizeof' auf unvollständigen Typ 'int []'

Die Lösung besteht darin, die Größe anzugeben. des Arrays in Klammern.Stellen Sie einfach sicher, dass die Größe die gleiche wie in der anderen Quellcode-Datei ist! Sie können den Compiler fälschen, indem Sie die Nummer ändern, und Sie

erhalten keinen Fehler . Aber das ist schlechter Programmierstil und nur nach Fehlern zu fragen. Obwohl ein

-Array einfach eine Folge von Variablen ist, die alle nebeneinander im Speicher liegen, ist der -Namen eines Arrays eigentlich nur ein Zeiger auf das erste Element im Array. Sie können den Namen als Zeiger verwenden. Tun Sie dies jedoch nur, wenn Sie wirklich mit einem Zeiger arbeiten müssen. Schließlich haben Sie wirklich keinen Grund, Code zu schreiben, der kryptisch ist, wie * (Numbers + 3) = 10;.. Die Umkehrung ist auch wahr. Schauen Sie sich diese Funktion an:

void ProcessArray (int * Zahlen) {cout << Zahlen [1] << endl;}

Diese Funktion verwendet einen Zeiger als Parameter, jedoch greifen Sie als Array darauf zu. Schreiben Sie keinen Code wie diesen; Stattdessen sollten Sie verstehen

, warum Code wie dieser funktioniert. Auf diese Weise erlangen Sie ein tieferes Wissen über Arrays und darüber, wie sie innerhalb des Computers leben, und dieses Wissen wiederum kann Ihnen beim Schreiben von Code helfen, der ordnungsgemäß funktioniert. Obwohl der Name des Arrays nur ein Zeiger ist, ist der Name eines Arrays von Ganzzahlen nicht das Gleiche wie ein Zeiger auf eine ganze Zahl. Überprüfen Sie diese Codezeilen (im Beispiel Array03):

int LotsONumbers [50]; int x; LotsONumbers = & x;

Richten Sie den Zeiger LotsONumbers

auf etwas anderes: etwas, das als ganze Zahl deklariert ist. Der Compiler lässt Sie das nicht tun; Sie erhalten einen Fehler. Das wäre nicht der Fall, wenn LotsONumbers als int * LotsONumbers deklariert würde; dann würde dieser Code funktionieren. Aber wie geschrieben, gibt Ihnen dieser Code einen Compilerfehler. Und glauben Sie es oder nicht, hier ist der Compiler-Fehler erhalten Sie in Code:: Blocks: Fehler: inkompatible Typen in der Zuordnung von 'int *' zu 'int [50]' Dieser Fehler impliziert der Compiler sieht ein eindeutige Unterscheidung zwischen den beiden Typen, int * und int []. Trotzdem ist der Name des Arrays tatsächlich ein Zeiger und Sie können ihn als einen verwenden. Man kann einfach nicht alles damit machen, was man mit einem normalen Zeiger machen kann, wie man es neu zuordnen kann.

Wenn Sie Arrays verwenden, beachten Sie die folgenden Tipps. Diese werden Ihnen helfen, Ihre Arrays fehlerfrei zu halten:

Halten Sie Ihren Code konsistent. Wenn Sie zum Beispiel einen Zeiger auf eine ganze Zahl deklarieren, behandeln Sie ihn nicht als Array.

Halten Sie Ihren Code klar und verständlich. Wenn Sie Zeiger übergeben, ist es in Ordnung, die Adresse des ersten Elements zu übernehmen, wie in & (MyNumbers [0]), wenn dies den Code klarer macht - obwohl es nur MyNumbers entspricht.

  • Wenn Sie ein Array deklarieren, versuchen Sie immer, eine Zahl in die Klammern zu setzen, es sei denn, Sie schreiben eine Funktion, die ein Array übernimmt.

  • Wenn Sie das Schlüsselwort extern verwenden, um ein Array zu deklarieren, setzen Sie die Array-Größe in Klammern. Aber sei konsistent! Verwenden Sie nicht eine Nummer einmal und eine andere Nummer ein anderes Mal. Der einfachste Weg, konsistent zu sein, ist die Verwendung einer Konstanten wie const int ArraySize = 10; in einer gemeinsamen Header-Datei und verwenden Sie diese dann in Ihrer Array-Deklaration: Int MyArray [ArraySize];..

Arrays und Zeiger in C ++ - Dummies

Die Wahl des Herausgebers

ÜBen Mathe-Fragen für die Praxis: Sequenzen - Dummies

ÜBen Mathe-Fragen für die Praxis: Sequenzen - Dummies

Wenn Sie eine Frage zur Praxis Core-Prüfung beantworten Wenn Sie eine arithmetische oder geometrische Sequenz lösen müssen, denken Sie daran: Es geht darum, regelmäßige Muster zu finden - und manchmal rückwärts zu arbeiten. In den folgenden Übungsfragen fängst du damit an, einen bestimmten Begriff in einer Folge zu finden (einfach: suche einfach nach dem Unterschied zwischen jedem ...

ÜBen Mathematische Fragen für die Praxis: Ähnliche und kongruente Formen - Dummies

ÜBen Mathematische Fragen für die Praxis: Ähnliche und kongruente Formen - Dummies

Auch wenn zwei Formen aussehen identisch, können sie nicht sein. Zum Beispiel können Sie bei der Praxis Core-Prüfung auf eine Frage stoßen, bei der zwei Formen gleich aussehen, aber es wird Ihnen gesagt, sie seien "ähnlich". " Was bedeutet das? Was ist, wenn sie als "kongruent" gekennzeichnet sind? Wenn Sie sich nicht sicher sind, sollten die folgenden Übungsfragen (und ihre Erklärungen) ...

ÜBen Mathematische Fragen für die Praxis: Vereinfachen eines algebraischen Ausdrucks - Dummys

ÜBen Mathematische Fragen für die Praxis: Vereinfachen eines algebraischen Ausdrucks - Dummys

Einige algebraische Ausdrücke auf der Praxis Core Prüfung kann einschüchternd aussehen, und Sie können sogar auf sie aufgeben und weitermachen. Wie Sie in den folgenden Übungsfragen sehen werden, können Sie jedoch einige einfache Techniken verwenden, wie das Faktorisieren und Kombinieren von ähnlichen Begriffen, um sie zu lösen. Übungsfragen Welche der folgenden ist die vereinfachte ...

Die Wahl des Herausgebers

Fotografieren im Sportmodus mit einer Canon EOS Rebel T3-Kamera - Dummies

Fotografieren im Sportmodus mit einer Canon EOS Rebel T3-Kamera - Dummies

Der Sportmodus der Canon Rebel T3 und T3i führt zu einer Reihe von Einstellungen, mit denen Sie sich bewegende Motive fotografieren können. Zunächst wählt die Kamera eine kurze Verschlusszeit aus, die zum Stoppen der Bewegung benötigt wird. "Farben, Schärfe und Kontrast sind alle im Sportmodus Standard, wobei keine der Anpassungen im Portrait ...

Aufnahme von Bildern im Nahaufnahmemodus mit einer Canon EOS Rebel T3-Kamera

Aufnahme von Bildern im Nahaufnahmemodus mit einer Canon EOS Rebel T3-Kamera

Der Nahaufnahme-Modus der Canon Rebel T3 und T3i ermöglicht es Ihnen nicht, näher am Motiv zu fokussieren als bei einigen Nicht-Spiegelreflexkameras. Die Nahfokussierungsfähigkeiten Ihrer Kamera hängen ganz von der Linse ab, die Sie verwenden. (In der Bedienungsanleitung Ihres Objektivs sollte die minimale Fokussierentfernung angegeben werden.) Auswahl des Nahaufnahmemodus ...

Fotografieren im Querformat mit einer Canon EOS Rebel T3-Kamera - Dummies

Fotografieren im Querformat mit einer Canon EOS Rebel T3-Kamera - Dummies

Der Landschaftsmodus der Canon Rebel T3 und T3i, der für die Aufnahme von Aussichtspunkten, Stadtskylinen und anderen großformatigen Motiven konzipiert wurde, erzeugt eine große Schärfentiefe. Infolgedessen erscheinen Objekte, die sich sowohl in der Nähe der Kamera als auch in einiger Entfernung befinden, scharf fokussiert. Wie im Hochformat-Modus erreicht der Querformat-Modus die größere Schärfentiefe durch Manipulieren von ...

Die Wahl des Herausgebers

Erstellen und Verwenden von Verknüpfungen im dynamischen GP-Navigationsbereich - Dummies

Erstellen und Verwenden von Verknüpfungen im dynamischen GP-Navigationsbereich - Dummies

Microsoft Dynamics GP-Verknüpfungen werden angezeigt. Der obere Teil des Navigationsfensters, wenn Sie Ihre Dynamics GP Homepage anzeigen. Verwenden Sie Verknüpfungen, um häufig verwendete Fenster und Ressourcen in Dynamics GP schnell zu öffnen. Zum Beispiel können Sie einen Satz von Verknüpfungen zu den Fenstern erstellen, die Sie regelmäßig verwenden, und einen anderen Satz für die ...

MYOB Software für Dummies-Spickzettel (Neuseeland-Ausgabe) - Dummies

MYOB Software für Dummies-Spickzettel (Neuseeland-Ausgabe) - Dummies

Sie können MYOB verwenden für Ihre Geschäftsanforderungen schnell und einfach durch diese einfachen Verknüpfungen. Wenn Sie zusätzliche Hilfe benötigen, bieten viele Websites MYOB-Unterstützung an.

MYOB Software für Dummies Cheat Sheet (Australische Ausgabe) - Dummies

MYOB Software für Dummies Cheat Sheet (Australische Ausgabe) - Dummies

Mit MYOB für Ihre Unternehmensanforderungen kann durch diese einfachen Abkürzungen noch schneller und einfacher gemacht werden. Und wenn Sie Hilfe benötigen, gibt es viele Websites, die Unterstützung anbieten.