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 ?!!