Struct-usage/Ort fuer eigene Strukturdefinitionen

Hallo zusammen!

Folgendes (Anfaenger-)Problem mit C:
ich definiere mir (m)eine (erste) eigene Struktur:

type struct eigenerTyp
{
int eins;
char feld[20];
...
} var\_meintyp;

Ich moechte die Struktur ueber eine eigene init-Funktion initialisieren koennen:

init\_eigenerTyp (\*var\_meintyp, param1, ...)
{
 var\_meintyp.eins = 42;
 var\_meintyp.feld[0]= A;
 ...
}

Wo in meinem C-Programm gehoert die Typdefinition hin?
Einfach unter die includes und Definitionen?
Wenn ja, kann dann „var_meintyp“ ueberhaupt wie beschrieben deklariert werden? Oder muss das im Mainprogramm erfolgen? Sonst kann die Variable ja eigentlich nicht bekannt sein, oder?

Hoffe, das Problem ist klar geworden. Vielleicht kann jemand das kurz erklaeren? Danke!
Jannemann

hi,

Folgendes (Anfaenger-)Problem mit C:
ich definiere mir (m)eine (erste) eigene Struktur:

type struct eigenerTyp
{
int eins;
char feld[20];

} var_meintyp;

Ich moechte die Struktur ueber eine eigene init-Funktion
initialisieren koennen:

init_eigenerTyp (*var_meintyp, param1, …)
{
var_meintyp.eins = 42;
var_meintyp.feld[0]= A;

}

Wo in meinem C-Programm gehoert die Typdefinition hin?
Einfach unter die includes und Definitionen?

ja, oder aber besser noch in ein neues modul. deine art der typdefinition ist mir unklar:
ich habe immer

typedef struct blabla {} blabla;

benutzt, aber wenns funzt ist das ja wurscht.

Wenn ja, kann dann „var_meintyp“ ueberhaupt wie beschrieben
deklariert werden? Oder muss das im Mainprogramm erfolgen?

du kannst die variable im deiner funktion initialisieren indem du sagst:

struct var_meintyp meineVarable;

damit hast du dann fuer deine struktur ein speicherli freigegeben. schoener aber ist eigebtlich dynamischer speicherallokation->schau doch einfach mal was du ueber malloc so findest.
vorrausgesetzt natuerlich du arbeitest nicht unter windoof
denn da glaube ich gibt es kein malloc.
wenn du den speicher freigegeben hast und due signatur deiner funktion so aussieht:
struct var_meintyp init_eigenerTyp (param1, …)
{
struct var_meintyp meineVariable;
meineVariable.eins =0; // :wink:
.
.
.
meineVariable.feld[0]= A; // vorausgesetzt du hast A sinnvoll besetzt
// also speicer freigegeben fuer A, auch hier noch eine kleine
// korrektur fuer feld, die variable feld sollte
// eher ein zeiger sein, damit du spaeter dein array
// dynamisch gross werden lassen kannst.
// hierzu auch wieder malloc anschauen …
// wie auch immer
//schliesslich sagst du dann unten
return meineVariable;
}

Sonst kann die Variable ja eigentlich nicht bekannt sein,
oder?

dass ist wohl war, aber in deiner funktion kannst du schon im vorhinein sorge trage, dass die variablen mit sinnvollen werten belegt werden. sonst hat man spaeter das problem, dass felder nicht initialisiert wurden. siehe malloc :wink:
oder aber in irgendwelchen variablen ganz merkwuerdige dinge stehen.

unter c hat man nicht dafuer gesorgt dass beim initialisieren sogenannte standwerte in variablen geschrieben werden. sprich:

int I;
frintf(stdout, „%i“, I);
kann schon sehr merkwuerdige dinge ausgeben. da dann in dieser variable noch unsinn drinsteht.

lange rede, gar kein sinn:

deine variable musst du zwar jetzt noceinmal in der main initialisieren und dann sagen:

struct meine_variable eineVariableVomTypMeineVariable = init_eigenerTyp (param1, …)

um auf jeden fall zu umgehen dass spaeter irgendein schrott drinsteht.

Hoffe, das Problem ist klar geworden. Vielleicht kann jemand
das kurz erklaeren? Danke!
Jannemann

ich hoffe ich hab deine frage beantwortet :wink:

gruß josh