16. maj 2002 - 10:29
Der er
12 kommentarer og 1 løsning
Struct bloktildeling
Hej C'ere. Hvordan kan jeg fylde en struct på listeform eller lignende? Altså et eller andet a'la: MinStruct = {123,456,"test"}; ?
Annonceindlæg fra Conscia
Jeg er meget sikker på du ikke kan i C.
i C++ kan du lave constructor og operator= i stucts. og derved gøre: MinStruct[128] = { MinStruct(123,456,"test"), MinStruct(789,112,"test2") }
ups, man kan vist godt initialisere struct i C.
Her er et eksempel struct init { char *fname; double (*fnct)(); }; struct init arith_fncts[] = { "sin", sin, "cos", cos, "atan", atan, "ln", log, "exp", exp, "sqrt", sqrt, 0, 0 };
her er et jeg selv har lavet =) #include <iostream.h> struct Test { int i; char str[128]; }; int main(int argc, char* argv[]) { struct Test t[] = { 1, "ost", 2, "ost2" }; cout << t[0].i << " - " << t[0].str << endl; cout << t[1].i << " - " << t[1].str << endl; return 0; }
Ok, men kan man andet end at initialisere, altså fylde nye værdier i på et senere tidspunkt?
med mindre du erklærer noget for const, kan du godt: struct Test t[] = { 1, "ost", 2, "ost2" }; t[0].i = 10; cout << t[0].i << " - " << t[0].str << endl;
Det er stadig i erklæringen i ovenstående eksempel, kan man senere?
er ikke sikker på hvad du mener ? du kan "tildele" til enhver tid. struct Test t[10] = { 1, "ost", 2, "ost2" }; t[0].i = 0; t[1].i = 1; t[2].i = 2; t[3].i = 3; t[4].i = 4; cout << t[0].i << " - " << t[0].str << endl; cout << t[1].i << " - " << t[1].str << endl; t[5].i = 5; t[6].i = 6; t[7].i = 7; t[8].i = 8; strcpy( t[8].str, "Ost8" ); cout << t[8].i << " - " << t[8].str << endl;
Ja, man kan tildele til enhver tid, men ikke i listeform, som jeg initielt ønskede? Det kan vel kun når man erklærer sin struct?
nåå, sådan :-) ja det har du ret i, { } virker kun i reklærings øjeblikket.
Kurser inden for grundlæggende programmering