Probleme mit Adressen und Zeigern (Anfänger)



  • Hallo, ich beschäftige mich mit Zeigern und Adressen von Integern..
    Ich komme an folgendem Beispiel nicht weiter, habe viel versucht und bekomme immer andere Feheler, ich glaube es muss eine Kleinigkeit sein, aber vieleicht seht ihr ja mehr 😉

    int main(array<System::String ^> ^args)
    {
    int i = 5; // Integer Variable (Wert 5)
    int* p_i = &i; // Adresse von i
    int** p_p_i = &p_i; // Adresse von p_i
    std::cout << "i: " << i << "\n"
    << "Adresse von i: " << p_i << "\n"
    << "Wert von i via Zeiger: " << *p_i << "\n"
    << "Adresse des Zeigers " << **p_p_i << "\n";
       return 0;
    }
    

    1>------ Erstellen gestartet: Projekt: Pointer 2, Konfiguration: Debug Win32 ------
    1> Pointer 2.cpp
    1>Pointer 2.cpp(13): error C2065: 'int∗': nichtdeklarierter Bezeichner
    1>Pointer 2.cpp(13): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'p_i'
    1>Pointer 2.cpp(13): error C2065: 'p_i': nichtdeklarierter Bezeichner
    1>Pointer 2.cpp(14): error C2065: 'int∗∗': nichtdeklarierter Bezeichner
    1>Pointer 2.cpp(14): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'p_p_i'
    1>Pointer 2.cpp(14): error C2065: 'p_p_i': nichtdeklarierter Bezeichner
    1>Pointer 2.cpp(14): error C2065: 'p_i': nichtdeklarierter Bezeichner
    1>Pointer 2.cpp(16): error C2065: 'p_i': nichtdeklarierter Bezeichner
    1>Pointer 2.cpp(17): error C2065: '∗p_i': nichtdeklarierter Bezeichner
    1>Pointer 2.cpp(18): error C2065: 'p_p_i': nichtdeklarierter Bezeichner
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Ich verzweifel hier noch hoffe jemand kann mich aufklären.

    ich habe zudem noch ein paar Verständnisprobleme in Bezug auf Adresse (die zB auf eine Zeigervariable verweist) und Zeiger. (Ich gehe davon aus, dass das gleich ist.) Bsp :
    Adresse der Zeigersvariable = Adresse auf die die Zeigervariable verweist



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Kompilierst du das auch tatsächlich als C++/CLI oder nur als reines C++?

    Zum Thema Zeiger.. ich habe da mal einen Artikel zu dem Thema geschrieben.
    In Kurzform:
    Eine Variable hat immer eine Adresse und einen Wert.

    An die Adresse kommt man in beiden Fällen mit dem &-operator.
    &int_variable liefert die Adresse der int-Variablen.
    &int_zeiger liefert die Adresse des int-Zeigers (eigentlich Zeiger auf int, aber egal).

    An den Wert einer Variable kommt man ganz normal:
    std::cout<<int_variable<<std::endl; //Könnte 5 ausgeben
    std::cout<<int_zeiger<<std::endl; //Könnte 0xbffff514 ausgeben

    Also, der Wert eines Zeigers ist eine Adresse!

    An den Wert der Speicherstelle wiederum kommt man mit dem *-operator. Das nennt sich auch Dereferenzieren:
    std::cout<<*int_zeiger<<std::endl; //Könnte 5 ausgeben



  • Wenn du wie ich hier in dem Beispiel "MS-Windows Visual C++ Express 2011" nutzt, dann mußt du sichergehen das in der Datei (HEADERDATEI) stdafx.h die Datei iostream includiert wird.

    /* Teil der stdafx.h */
    #include <iostream>
    
    #include "stdafx.h"
    
    using namespace System;
    
    int main(array<System::String ^> ^args) 
    { 
    	int i = 5; // Integer Variable (Wert 5) 
    	int* p_i = &i; // Adresse von i 
    	int** p_p_i = &p_i; // Adresse von p_i 
    
    	std::cout << "i: " << i << "\n" 
    	<< "Adresse von i: " << &p_i << "\n" 
    	<< "Wert von i via Zeiger: " << *p_i << "\n" 
    	<< "Adresse des Zeigers " << &p_p_i << "\n"; 
    
    	return 0; 
    }
    

    i: 5
    Adresse von i: 0017EED0
    Wert von i via Zeiger: 5
    Adresse des Zeigers 0017EEC8
    Drücken Sie eine beliebige Taste . . .

    Dies gibt den Inhalt der Variable aus.

    std::cout << i << endl;
    

    Hiermit gibt man den Inhalt der Variable aus, auf die der Zeiger zeigt.

    std::cout << *p_i << endl;
    

    Und hiermit gibt man die Speicheradresse der Variable aus.

    std::cout << &p_p_i << endl;
    

    Mit dem Stern sagt man das du Inhalt sehen möchtest, also Inhalt der Adresse auf die die Adresse zeigt. Und mit & sagst du, du möchtest nur die Adresse sehen die auf die Variable zeigt.

    Ich hoffe ich konnte etwas helfen!



  • Vielen herzlichen Dank für die Lösungen.
    Es lang letztendlich an dem
    #include <iostream> ind der Header stdafx.h
    Wäre nie darauf gekommen (als Anfänger halt).

    Danke auch für die einleuchtende Erklärung dazu hilft mir wirklich sehr 🙂

    Klasse Forum 😃


Anmelden zum Antworten