Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
08.03.2004, 18:00
BRoDO



moin.
warum funtioniert
Quellcode:void gleich20(int *P_zahlen)
{
P_zahlen[1] = 20;
}

int main()
{
int zahlen[10];
gleich20(zahlen);
cout << zahlen[1];
}
das und das
Quellcode:void gleich20(int *P_zahlen)
{
P_zahlen = 20;
}

int main()
{
int zahlen;
gleich20(zahlen);
cout << zahlen;
}
nicht??

mir ist klar das es beim 2. blödsin ist mit nem pointer zu arbeiten, aber warum funktioniert es mit nem array, und mit ner "normalen" variable nicht?

--

[ Kein STEAM | Kein TGC/TCPA | Keine Softwarepatente |Keine Alternativ-OS-Propaganda in Windows-Threads | Keine Bewertungen ][KEIN GARNIX!]


Dieser Beitrag wurde am 08.03.2004 um 18:01 von BRoDO bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
08.03.2004, 18:27
CN



O_o sollte doch klar sein irgendwie

P_Zahlen = 20;
du weisst P_Zahlen (der addresse des ints) die addresse 20 zu, nich den wert 20

abgesehen davon dass du nen int, und nicht die addresse eines ints übergibst

so geht das:

Quellcode:#include <iostream>

using namespace std;

void gleich20(int *P_zahlen)
{
    *P_zahlen = 20;
}

int main()
{
    int zahlen;
    gleich20(&zahlen);
    cout << zahlen << endl;
    
    return 0;
}
oder so:
Quellcode:#include <iostream>

using namespace std;

void gleich20(int &P_zahlen)
{
    P_zahlen = 20;
}

int main()
{
    int zahlen;
    gleich20(zahlen);
    cout << zahlen << endl;
    
    return 0;
}

--


Dieser Beitrag wurde am 08.03.2004 um 18:38 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
08.03.2004, 18:50
Leviathan



Was BRoDO meint ist wahrscheinlich folgendes:Quellcode:void gleich20(int *P_zahlen)
{
*P_zahlen = 20;
}

int main()
{
int zahlen;
gleich20(&zahlen);
cout << zahlen;
}
So wurde das gemacht, als es noch keine Referenzen gab, sondern nur Übergabe als Wert und als Pointer. Ich weiss nicht, ob der C-Standard mitlerweile auch Referenzen kennt, die Bücher, die ich zu C habe kennen (zumindest teilweise) keine Referenzen.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
003
08.03.2004, 18:50
BRoDO



ja ne, cn. "cout << zahlen[1];" (beim ersten beispiel) gibt 20 aus. das is das was ich net verstehe.

--

[ Kein STEAM | Kein TGC/TCPA | Keine Softwarepatente |Keine Alternativ-OS-Propaganda in Windows-Threads | Keine Bewertungen ][KEIN GARNIX!]

zum Seitenanfang zum Seitenende Profil || Suche
004
08.03.2004, 19:35
CN



weil du die addresse des arrays an die funktion übergibst und somit das übergebene array verändert wird

hättest du zb
Quellcode:void gleich20(int P_zahlen)
{
    P_zahlen = 20;
}
würde mit einer kopie des ints gearbeitet werden
und nicht mit dem int selbst, wodurch die variable unberührt bleibt

konsultier evt mal en buch

leviathan wie du siehst hab ich beide möglichkeiten bereits gepostet

--

zum Seitenanfang zum Seitenende Profil || Suche
005
08.03.2004, 20:49
BRoDO



ok, also ich glaub das problem is noch nicht ganz rübergekommen....

ich hab mal ein simpleres beispiel geschrieben, das die sache auf den punkt bringt:
Quellcode:1: using namespace std;
2: int main()
3: {
4:   int a_zahlen[10], *p_zahlen, zahlen;
5:
6:   p_zahlen = a_zahlen;
7:   p_zahlen = zahlen;
8:
9: }
zeile 6 bringt keinen error, zeile 7 schon. es ist klar das zeile 7 entweder rechts referenziert oder links dereferenziert werden müsste, damit es leuft. aber warum funktioniert zeile 6 ohne das der compiler meckert?

--

[ Kein STEAM | Kein TGC/TCPA | Keine Softwarepatente |Keine Alternativ-OS-Propaganda in Windows-Threads | Keine Bewertungen ][KEIN GARNIX!]


Dieser Beitrag wurde am 08.03.2004 um 20:49 von BRoDO bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
08.03.2004, 20:56
CN



he?

Zitat:
konsultier evt mal en buch
um nicht zu sagen "lern c++" :|
selbst wenn ich nich direkt die frage beantwortet hab, wurde das auch schon indirekt mit beantwortet

Zitat:
weil du die addresse des arrays an die funktion übergibst
a_zahlen is ne addresse und zeigt auf das erste arrayelement
zb:
*a_zahlen bzw *(a_zahlen+0) is das selbe wie a_zahlen[0]

warum zeile 7 nich geht hast du ja selber beantwortet

nochmal zur verdeutlichung:
man kann auch:
p_zahlen = &a_zahlen[0];
.. addresse des ersten elements

--


Dieser Beitrag wurde am 08.03.2004 um 21:21 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
08.03.2004, 21:30
BRoDO



Zitat:
a_zahlen is ne addresse und zeigt auf das erste arrayelement
ok, danke jetzt hab ich kapiert.
Zitat:
um nicht zu sagen "lern c++"
bin ich gerade dabei...

--

[ Kein STEAM | Kein TGC/TCPA | Keine Softwarepatente |Keine Alternativ-OS-Propaganda in Windows-Threads | Keine Bewertungen ][KEIN GARNIX!]

zum Seitenanfang zum Seitenende Profil || Suche