Folgender Code macht mein Verständnisproblem deutlich:
1 | #include <iostream> |
2 | #include <conio.h> |
3 | |
4 | using namespace std; |
5 | |
6 | int main(void) |
7 | {
|
8 | int a; |
9 | |
10 | /*
|
11 | _Speicherzellen_______________ _____________
|
12 | | [1] | [2] | [3] | [4] | [5] | [6] |
|
13 | | 127 | 42 | 7 | 1024 | 31415 | 1337 |
|
14 | |_______|______|______|______|_______|______|
|
15 | */
|
16 | |
17 | //Adresse ausgeben
|
18 | cout << "Adresse von a: " << &a << endl; |
19 | |
20 | //Datentyp, der Adressen speichert: Zeiger (Pointer)
|
21 | int *zeigerAufA = &a; |
22 | |
23 | cout << "Fuer die erste Methode 1 eingeben\n" |
24 | << "Fuer die zweite Methode 2 eingeben\n"; |
25 | |
26 | char eingabe; |
27 | do { |
28 | eingabe = getch();//Buchstabe von Tastatur abfangen (ohne ENTER) |
29 | |
30 | if(eingabe == '1') { |
31 | a = 7; |
32 | cout << "a = " << a << endl; |
33 | } else if (eingabe == '2') { |
34 | *zeigerAufA = 42; |
35 | //*zeigerAufA = &a;
|
36 | cout << "a = " << a << endl << endl; |
37 | cout << "zeigerAufA = " << zeigerAufA << endl;//zeigerAufA (ADRESSE) |
38 | cout << "*zeigerAufA = " << *zeigerAufA << endl;//*zeigerAufA (WERT) |
39 | } else { |
40 | return 0; |
41 | }
|
42 | |
43 | } while((eingabe == '1') || (eingabe == '2')); |
44 | |
45 | return 0; |
46 | |
47 | }
|
Oben im Programm wird "*zeigerAufA" eine Adresse nämlich "&a" zugewiesen. Weiter unten wird demselben Objekt eine Zahl und zwar "42" zugewiesen.
1 | 1) *zeigerAufA = &a; |
2 | 2) *zeigerAufA = 42; |
Wenn ich im Programmtext unter "*zeigerAufA = 42;" nochmals das auskommentierte "*zeigerAufA = &a;" einfüge, läuft dieses beim ersten Auftreten (oben) unter Dev C++ problemlos durch den Compiler, während es beim zweiten Auftreten (unten) angemeckert wird. "[Error] invalid conversion from 'int*' to 'int' [-fpermissive]" Das Programm stammt aus einem Youtube Video.[1] Da erwähnt der Verfasser zwar bei Minute 9:05, dass das Sternchen unten nicht das gleiche ist, wie das oben. Aber er erklärt den Unterschied nicht so richtig. Wieso funktioniert der gleiche Befehl oben im Programm und unten nicht? Funktioniert das Ganze auch unter C (ohne ++)? [1] https://www.youtube.com/watch?v=iR561UmnDXI