Danke für die prompte Antwort Sternmull
Ich habe es nachvollziehen können (Linux, GNU C++ Compiler).
Im Detail:
Der Standard funktioniert:
Code: Alles auswählen
#include<iostream>
using namespace std;
int main ()
{
int x = 10;
int *iptr = &x;
cout << "\n\n Variable x: " << x; // Ausgabe: 10
cout << "\n Zeiger *iptr: " <<*iptr; // Ausgabe: 10
cout << "\n\nProgrammende\n\n";
}
Auch dies ist Standard und funktioniert
Code: Alles auswählen
#include<iostream>
using namespace std;
int main ()
{
int x = 10;
int *iptr = &x;
*iptr = 4;
cout << "\n\n Variable x: " << x; // Ausgabe: 4
cout << "\n Zeiger *iptr: " <<*iptr; // Ausgabe: 4
cout << "\n\nProgrammende\n\n";
}
Dies funktioniert nicht. Fehlermeldung des Compilers:
error: invalid conversion from ‘int’ to ‘int*’
Code: Alles auswählen
#include<iostream>
using namespace std;
int main ()
{
int *iptr = 4;
cout << "\n Zeiger *iptr: " <<*iptr;
cout << "\n\nProgrammende\n\n";
}
Kein Compilerfehler, aber bei Programmstart Fehlermeldung Speicherzugriffsfehler
Code: Alles auswählen
#include<iostream>
using namespace std;
int main ()
{
int *iptr;
*iptr = 4;
cout << "\n Zeiger *iptr: " <<*iptr;
cout << "\n\nProgrammende\n\n";
}
Angedeutete Möglichkeit von Sternmull
Kein Compilerfehler, aber bei Programmstart Fehlermeldung Speicherzugriffsfehler
aber erst dann, wenn cout <<*p2; verwendet wird.
Code: Alles auswählen
#include<iostream>
using namespace std;
int main ()
{
int * p2 = reinterpret_cast<int*>(4); // C++ reinterpret cast
cout << "\n Zeiger *p2: " <<*p2;
cout << "\n\nProgrammende\n\n";
}
Warum funktioniert das ?
Code: Alles auswählen
#include<iostream>
using namespace std;
int main ()
{
int * iptr = new int (4); // C++ reinterpret cast
cout << "\n Zeiger *iptr: " <<*iptr; // Ausgabe 4
cout << "\n\nProgrammende\n\n";
}
Ist es so richtig?: Mit new wird Speichplatz für eine int-Variable allokiert. Intern gibt es für diesen Speicherplatz eine Adresse, die dem Anwender nicht bekannt gemacht wird, da der Zugriff über den Zeiger *iptr zustande kommt. Somit verweist der Zeiger *iptr auf eine Variable und nicht auf einen Wert. Einem int-Zeiger direkt einen Wert zuzuweisen geht nicht.
In meinem ersten Posting habe ich meine Literatur (C++ von Ulrich Breymann) falsch interpretiert.
Er schreibt zwar *ip = 99; hat aber auf der Vorseite *ip = &i, stehen und somit keine direkte Wertzuweisung getätigt.
Nicht erklären kann ich, warum die Lösung von Sternmull erst zu einer Fehlermeldung kommt, wenn der Zeiger mit cout verwendet wird.
Terep
Avatar = „Odyssee im Weltraum“ Film von Stanley Kubrick (Warner Brothers);
nach dem Buch von Arthur C. Clarke. It will becoming true ?!!