WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 20.05.2001, 14:20   #1
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Frage Adressrückgabe in C

Ich hab da ein kleines Problem:

Die Funktion insert sollte den Zeiger ptr_first so verändern können, dass auch in Main bekannt ist, wo dieser hinzeigt. Aber in der Funktion doit wird schon nur 0x00000000 zurückgegeben -> kann mir da wer helfen?!?!

Danke!!

======================================

typedef struct _adresse
{ [...]
struct _adresse *ptr_next; // Zeiger auf nächsten Datensatz
}Adresse;

int main()
{
[...]
Adresse *ptr_first = NULL; // Zeiger auf das 1. Element
[...]
doit(taste, ptr_first);
[...]
}

void doit(char taste, Adresse *ptr_first)
{
Adresse tmp;

switch(taste)
{
[...]
case 'e':
case 'E': // Datensatz einlesen
einlesen(&tmp); // Einlesen funzt
insert(ptr_first, &tmp); // ptr_first ist immer NULL!!!!
break;
default: break;
}
}

void insert(Adresse *ptr_first, Adresse *ptr_tmp)
{ // Einfügen in Liste (an richtiger Position!!)
Adresse *ptr_neu; // Zeiger auf neuen Datensatz
Adresse *ptr_akt = ptr_first;
Adresse *ptr_old = ptr_first;
ptr_neu = malloc(sizeof(Adresse)); // Speicher reservieren

[...]

// Zeiger verbiegen
ptr_neu->ptr_next = NULL;
ptr_first = ptr_neu;
}
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Alt 20.05.2001, 14:34   #2
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

ich weiss jetzt nicht ob ich das richtig versteh du willst das der pointer ptr ins main zurückgegeben wird oder nicht? wenn ja dann solltest du ihn auch zurückgeben, denn wenn du in ein unterprogramm einen wert übergibts ist es nur eine kopie vom anfäglichem pointer und du kannst ändern was du willst aba im hauptprogramm wird der zeiger immer den ursprünlichen wert haben
deswegen variblen zurückgeben mit 'return <varname>;'

Adresse * insert(Adresse *ptr_first, Adresse *ptr_tmp)
{....
return ptr;//am ende vom up
}

void doit(char taste, Adresse *ptr_first)
{
Adresse *x;
...
x=insert(Adresse *ptr_first, Adresse *ptr_temp);
//jetzt hat x den wert den es in insert verändert wurde
...
}

das sollte dein prob beheben wenns war is das gleiche kannst dann mit main auch machen

aja wennst ned in linux deine proggies schreibts dann kannst auch
void main(void) schreiben und dir am ende das return 0; dasparen
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Alt 20.05.2001, 20:51   #3
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Lächeln Danke!!

Danke, ist eh klar warum des net funzt!

Jetzt geht es!!!
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Alt 20.05.2001, 21:51   #4
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

yeaha jeden tag eine gute tat
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Alt 21.05.2001, 10:53   #5
Sonic
Master
 
Registriert seit: 28.03.2000
Alter: 45
Beiträge: 691


Sonic eine Nachricht über ICQ schicken
Standard

Entweder du übergibst den Pointer an doit und liferst ihn an die aufrufende funktion mir return zurück und weisst ihn in main zu:

void main()
{
[...]
ptr_first=doit(taste, ptr_first);
[...]
}

Adresse ptr_first doit(char taste, Adresse *ptr_first)
{
[...]

return *ptr_first;
}

Oder du übergibst einen pointer auf den Pointer. (Finde ich schöner ) Dann brauchst du nichts zurückliefern und auch nichts zuweisen:

void main()
{
[...]
doit(taste, *ptr_first);
[...]
}

void doit(char taste, Adresse **ptr_first)
{
[...]
}
____________________________________
__________________
|»»»»»SONIC««««««|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Sonic ist offline   Mit Zitat antworten
Alt 23.05.2001, 07:38   #6
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

geh ned doppelpointer
des pfusch hoch 3

ned ernst nehmen hab halt nur sehr sehr sehr schlecht erfahrungen mit den dinger
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:55 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag