C++ Zeiger Frage

... komplette Frage anzeigen

5 Antworten

Es gibt 2 Möglichkeiten, das Stichwort heißt Call-by-Reference. Die Standardart, Werte an Funktionen in C++ zu übergeben ist Call-by-Value, d.h. die Werte der Variablen werden kopiert und innerhalb der Funktion wird nur auf dieser Kopie rumgedoktort, sprich alle Änderungen betreffen den Ausgangswert nicht. Mit Call-by-Reference wird jedoch nur eine Referenz auf den Ausgangswert übergeben. Bevor ich zwei Beispiele bringe möchte ich dich aber darauf hinweisen, dass du wirklich verstanden haben solltest, wie Zeiger und Referenzen in C++ funktionieren. Sonst kannst du viel kaputt machen.

Hier ein Call-by-Reference Beispiel:

void addOne(int& a) {
    a++;
}

void main() {
    int i = 1;
    addOne(i); // i hat jetzt den Wert 2
}

Die Besonderheit ist hier einfach, dass an die Funktion addOne lediglich eine Referenz übergeben wird - diese zeigt dann auf den Speicherbereich von i - deswegen hat i auch nach dem Aufruf den Wert 2

    void addOne(int* a) {
        (*a)++;
    }

    void main() {
        int i = 1;
        addOne(&i); // i hat jetzt den Wert 2
    }

Ähnliches Beispiel wie oben, konzeptionell aber anders: Hier findet eigentlich weiterhin ein Call-by-Value statt: Es wird nämlich nur ein Zeiger übergeben. Die Adresse des Zeigers wird kopiert und dann an die Funktion übergeben. Da wir aber nicht den Zeiger selbst, sondern den Wert wo dieser hinzeigt manipulieren, können wir auch damit innerhalb der Funktion den Wert von i ändern

Antwort bewerten Vielen Dank für Deine Bewertung

Mein C++ ist verrostet und veraltet, kann mich nichtmal mehr an die den header erinnern, ist aber auch wurst.

Da ich bezweifle das um Viertel nach 1 noch jemand online ist, der der C++ Sprache mächtig ist, werde ich versuchen dir zu helfen :D

SO wie du es jetzt hast, wird das nicht gehen. du kannst auch nicht jemanden der 200km von dir entfernt ist, die Hand geben. Aber stell das ganze doch mal um, in C++ gibts doch irgentwas mit globale Variablen oder liege ich da Falsch? Ich bin mir nicht sicher, falls das nicht stimmt tuts mir leid, aber ich glaube da konnte man doch eine Variable global definieren, um sie dann über funktionen stehen zu lassen.

Zurzeit sieht das so aus:

Funktion1:

    Anfang
    Variable A wird definiert
    Ende

Funktion 2:

    Anfang
    Zeiger auf Variable A
    Ende

Nun erklär mir, wie der Zeiger in der Zweiten Funktion auf die Variable A zeigen soll?

Gestalte es um, so dass die Variable A über den Funktionen steht:

Variable A wird definiert

Funktion 1:

Anfang
Ende

Funktion 2:

Anfang
Zeiger auf Variable A
Ende

So kann die Funktion auf die Variable zugreifen.

Hoffe ich konnte helfen, kann dir aber nicht garantieren dass das stimmt.

Mein letztes C++-Projekt war Jahre her ;-) Aber eigentlich sollte es so stimmen :D

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Nickelback93
17.03.2012, 01:31

Es stimmt alles was du geschrieben hast und es gibt in C++ die globalen Variablen. Mein Problem ist, dass ich zufällig generierte Zahlen in ein bzw. zwei Variablen speichern möchte.

Leider funktioniert dies nicht :

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <time.h>

using namespace std;

srand(time(0));

srand() kann man nicht global definieren, also müsste ich es in eine Funktion bzw. in main() schreiben.

Auch wenn dein C++ verrostet ist ;) wird dieser kleine Ausschnitt sicher keine Probleme bereiten.

Vielen Dank für deine ausführliche Antwort =)

Mit freundlichen Grüßen

Nickelback93

0

Du kopierst das alles am besten in ein Array. Das ist ein unabhängiges Objekt.

Antwort bewerten Vielen Dank für Deine Bewertung

Mit der Frage bist Du besser bei Computerfrage.net aufgehoben!

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Nickelback93
17.03.2012, 01:19

Genial, wusst ich garnicht, dass es diese Seite gibt. Danke sehr !

0

Meld dich bei Chip.de an, dort kannst du alles rund um Computer, Technik etc. fragen!

Mit sowas bekommt man hier selten hilfreiche Antworten! :)

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?