frage zu einer struktur
-
Hallo zusammen,
die structur ist ausßerhalb vom hauptprog
struct cmd_admin{ unsigned int prior; char client; char cmd[5]; };
eine structur ist doch einfach ein neuer datentyp der die einzelnen variablen alle zusammen fassen kann oder?
aber nun zum hauptprog.
void main() struct cmd_admin cmd_proc1, cmd_proc2; do { printf("zahl eingeben:"); scanf("%u",&cmd_proc1.prior); ... ... }
Und zwar habe ich ja einmal eine structur im Hauptprg. und einmal ausserhalb
was hat es nun mit der struct im hautprogramm zu tun. da steht ja "struct cmd_admin cmd_proc1, cmd_proc2"
und dann noch der scanf befehl der die daten einliesst. aber welche
wird die variable prior per reference übergeben?
und dann noch die frage was dieses proc1 da überhaupt soll?ich hoffe ihr habt meine frage einigermaßen verstanden. sitze da schon ein bisschen länger hilflos dran.
danke für antworten.
-
Ein struct ist letzendlich ein normaler Datentyp, genau wie int, char oder void*. Global hast du nur eine Definition angegeben, wie eine "struct cmd_admin" auszusehen hat. Und in der main() hast du in der ersten Zeile zwei Objekte mit den Namen "cmd_proc1" und "cmd_proc2" erzeugt, die mit dieser Definition erzeugt werden - jedes dieser Objekte besitzt also die Elemente ".prior", ".client" und ".cmd". Der scanf()-Aufruf schreibt dann in das Element prior der Variable cmd_proc1.
PS: Es heißt übrigens "int main()"
-
danke schonmal für die schnelle antwort. hat mir weitergeholfen.
hab aber noch was kleines anderes und zwar die selbe struktur:struct cmd_admin{ unsigned int prior; char client; char cmd[5]; };
und dann aber diesen code:
void std_task(struct cmd_admin v, struct [b]cmd_admin *r[/b]){ v.prior = 0; v.client = '-'; strcpy(v.cmd,"###"); r->prior = 0; r->client ='-'; r->strcpy(r->cmd,"###"); } void main() { struct cmd_admin value [b]struct cmd_admin *ref=(struct cmd_admin *)malloc(sizeof(struct cmd_admin));[/b] do { printf("zahle eingeben:"); scanf("%u",&value.prior); ... ... printf("zahle eingeben:"); [b]scanf("%u",&ref->prior)[/b];
und zwar gehts darum einmal einen wertaufruf und einmal einen reference aufruf zu machen. aber was ist jetzt was?
und bei den dick markierten sachen versteh ich nicht was das sein soll.
bitte da nochmal um hilfe.
danke
-
Das * steht für Pointer (Zeiger) - also letzlich die Adresse eines Objekts.
In C werden Parameter normalerweise per Wert übergeben, d.h. die Funktion erhält eine Kopie des Objekts und kann demzufolge keine Änderungen zurückgeben. Wenn das doch erwünscht ist, übergibt man einen Pointer, der die Adresse des Objektes enthält - den kann die Funktion per * dereferenzieren, um auf die Daten des Hauptprogramms zuzugriefen (und -> ist eine Kombination aus . und *).
(im Endeffekt bedeutet das - die Änderungen, die std_task an v vornimmt, sind am Ende weg, die Änderungen an r bleiben bestehen)PS: Und die malloc()-Zeile dient dazu, Speicher außerhalb des Funktionsstacks anzufordern - der bleibt solange gültig, bis er explizit wieder freigegeben wird.
-
Den Rückgabewert von malloc sollte man übrigens nicht casten.
struct cmd_admin *ref=malloc(sizeof(struct cmd_admin));
Das reicht vollkommen aus.
-
wieso schreibt er immer:
struct cmd_admin oObjekt; /bzw. struct cmd_admin *pObjekt;
und nicht einfach:
cmd_admin oObjekt; //bzw. cmd_admin *pObjekt;
hat das nen grund?
-
Hallo Boris,
Damit dein zweiter Code compilert werden kann, müßte man von der Struktur einen Typ definieren. Zum Beispiel so:typedef struct _tag_cmd_admin { .... } cmd_admin;
-
Ich glaube ja fast, dass BorisDieKlinge immer einen C++-Compiler für C benutzt
-
achso.. und der typedef schnick schnack ist bei nem c-compiler notweniig??
ja benutzt immer ne c++ compiler:)
-
BorisDieKlinge schrieb:
ja benutzt immer ne c++ compiler:)
Obwohl C und C++ einen gemeinsamen Ursprung haben, sind es zwei unabhängige Programmiersprachen mit recht gravierenden Unterschieden. Man sollte deshalb keinen C++ Compiler verwenden, wenn man in C programmieren will.
Niemand würde auf die Idee kommen, einen PHP-Code mit einem Java-Compiler zu compilieren.