WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Adressrückgabe in C (http://www.wcm.at/forum/showthread.php?t=21781)

SNo0py 20.05.2001 14:20

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;
}

pong 20.05.2001 14:34

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

SNo0py 20.05.2001 20:51

Danke!!
 
Danke, ist eh klar warum des net funzt!

Jetzt geht es!!! :)

pong 20.05.2001 21:51

yeaha jeden tag eine gute tat :)

Sonic 21.05.2001 10:53

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)
{
[...]
}

pong 23.05.2001 07:38

geh ned doppelpointer :)
des pfusch hoch 3 :)

ned ernst nehmen hab halt nur sehr sehr sehr schlecht erfahrungen mit den dinger :(


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:27 Uhr.

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