Pointer von Struktur übergeben

Hallo!

Ich versuche in C, einen Pointer der auf eine Struktur zeigt, von einer Funktion zurückzugeben, leider mit bisher wenig erfolg! Könnte mir da jemand etwas behilflich sein?

Kleines TestBsp:
Code:
#include <stdio.h>
#include <stdlib.h>


struct person{
int data;
};

//Funktion
struct person funktion();

int main(){

	struct person *ip;


*ip=funktion() ;


if(ip==NULL){
	printf("jeah baby =)");
}
return 0;
}



struct person funktion(){


struct person *ptr=NULL;

return *ptr;
}
 
Code:
#include <stdio.h>
#include <stdlib.h>

struct person{
int data;
};

//Funktion
struct person* funktion();   //Du willst den Zeigers zurückgeben 
                                            //(NULL), nicht den Wert auf den er zeigt

int main(){

struct person *ip;             //Zeigt aber auch ins Leere. Gefährlich. Am besten
                                         //NULL setzen. Aber da du ja testen willst on ip erst
                                         //nach dem Funktionsaufruf NULL ist, kannst du das 
                                         //mal so stehen lassen.
ip=funktion() ;                  //hier hattest du *ip=funktion(). Du willst aber ip was 
                                         //zuweisen, nicht der Stelle auf den er zeigt.


if(ip==NULL){                    //Du vergleichst den Inhalt von ip
	printf("jeah baby =)");
}
return 0;
}

struct person* funktion(){

struct person *ptr = NULL;
return ptr;                    //Du gibst den Inhalt des Zeigers zurück. Du hattest dort
}                                   //return *prt. Er zeigt auf nichts und daher wird auch kein
                                     //Wert zurückgegeben. * bedeutet immer, dass   
                                     //du auf den Wert der Adresse zugreifst, auf den prt 
                                    //zeigt.

Also: ptr  bedeutet der Zugriff auf den Inhalt des Zeigers(also eine Adresse). Ist ja in dem Sinne auch nur ne Variable, die eine Adresse speichert.
 *prt bedeutet Zugriff auf den Inhalt der Speicherzelle(n), deren Adresse  
 durch ptr repräsentiert wird.

So müsste es gehen. Aber benutze Zeiger nur da, wo du sie wirklich brauchst. 

Warscheinlich wird sich die CMD sofort wieder schließen, nachdem du das Programm gestartet hast. Füge am besten nach dem if{} noch ein getchar(); ein.
 
Danke. Vor allem für die überaus genau Erklärung!

Das Programm sollte nur als BSP dienen, ich arbeite gerade an einem anderen Programm, für das ich das benötige!
 
Zurück
Oben