Visual C++ 2017 erkennt pointer nicht!



  • Guten Abend Freunde ich programmiere gerade etwas mit dynamischen Arrays und dabei ist folgender Code entstanden:

    cout << "wie viele werte möchtest du eingeben?" << endl << "<<";
    	int anzahl;
    	cin >> anzahl;
    	int* pntr = new int[anzahl];
    	system("cls");
    	for (int i = 0; i < anzahl; i++) {
    		cout << "Bitte gib den " << i + 1 << " Wert ein";
    		cin >> *pntr[i];//Fehlermeldung
    		system("cls");
    		cout << *pntr[i];//Fehlermeldung
    	}
    

    allerdings sagt Visual C++ zu den markierten Zeieln:

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler (aktiv) E0075 Der Operand von "*" muss ein Zeiger sein. Project1

    wenn ich aber folgendes schreibe funktioniert alles:

    cout << "wie viele werte möchtest du eingeben?" << endl << "<<";
    	int anzahl;
    	cin >> anzahl;
    	int* pntr = new int[anzahl];
    	system("cls");
    	for (int i = 0; i < anzahl; i++) {
    		cout << "Bitte gib den " << i + 1 << " Wert ein";
    		cin >> *pntr++;
    		system("cls");
    		cout << *pntr;
    	}
    

    wenn ich das dynamische Array ausgeben will(egal ob im Programm mit cout oder im debugger)kommt immer nur die Speicheradresse desObjektes auf das er verweist(obwohl ich es deferenziere(also ein * vor pointernahmen))

    jetzt würde mich mal interessieren warum das oben nicht funktioniert aber das unten schon,und warum das Array nicht richtig funktioniert.
    Vielen Dank im Vorraus



  • Nein, nicht "Visual C++ 2017 erkennt pointer nicht" sondern du kannst C++ nicht 🙄

    Thorsten54 schrieb:

    jetzt würde mich mal interessieren warum das oben nicht funktioniert aber das unten schon.

    na weil

    a[b]
    das selbe ist wie
    *(a + b)
    das ist halt so definiert.

    d.h.

    *p[i]
    ist
    * p[i]
    ist
    * *(p + i)
    ist ein * zu viel.



  • pntr[i]
    

    Damit greifst du auf ein int zu. Ein int kannst du nicht dereferenzieren, ist ja kein Zeiger...

    *pntr++
    

    Nutzt du ein Array im Zusammenhang mit Arithmetik, Dereferenzierung, Funktionsargument oder Zuweisung zerfällt das Array automatisch in einen Zeiger auf das erste Element des Arrays. Du hast hier also ein int* und diesen Zeiger kannst du logischerweise dereferenzieren und landest bei einem int.



  • [quote="out"]

    pntr[i]
    

    Damit greifst du auf ein int zu. Ein int kannst du nicht dereferenzieren, ist ja kein Zeiger...
    Aber ist nicht pntr[i] ein zeiger auf das int?



  • Nö. pntr ist ein Zeiger auf ein int.

    PS: Wenn du ein Buch zum lernen nutzt, das solche Beispiele enthält, solltest du es wirklich ganz schnell wegwerfen. Das ist kein richtiges C++. Ist halt nicht überall C++ drin wo C++ draufsteht. 😃



  • out schrieb:

    Nö. pntr ist ein Zeiger auf ein int.

    PS: Wenn du ein Buch zum lernen nutzt, das solche Beispiele enthält, solltest du es wirklich ganz schnell wegwerfen. Das ist kein richtiges C++. Ist halt nicht überall C++ drin wo C++ draufsteht. 😃

    ja ich merks auch gerade 😃



  • Thorsten54 schrieb:

    out schrieb:

    Nö. pntr ist ein Zeiger auf ein int.

    PS: Wenn du ein Buch zum lernen nutzt, das solche Beispiele enthält, solltest du es wirklich ganz schnell wegwerfen. Das ist kein richtiges C++. Ist halt nicht überall C++ drin wo C++ draufsteht. 😃

    ja ich merks auch gerade 😃

    Kannst du uns noch den Titel deines Buches nennen, damit andere Leute nicht darauf reinfallen?



  • Das dynamische Array in C++ heißt std::vector.



  • "jetzt lerne ich C++"
    von Dirk Louis
    habt ihr vieleicht ne buchempfelung



  • Thorsten54 schrieb:

    "jetzt lerne ich C++"
    von Dirk Louis
    habt ihr vieleicht ne buchempfelung

    Ist ja nicht so, dass in meiner Signatur C++ Bücher steht.

    Deutsch: Der C++ Programmierer von Ulrich Breymann
    Englisch: C++ Primer von Stanley Lippman ODER Programming: Principles and Practice Using C++ von Bjarne Stroustrup


Anmelden zum Antworten