mehrer werte im array intialisieren
-
Hallo,
ich habe ein globales array.
und will die werte für das array im main initialisieren.bisher mach ich das so:
dies funktioniert auch soweit
int array[4]; int main() { array[0]=4; array[1]=7; return 0; }
leider ist dies umständlich geht das nicht auch einfach ich hab an sowas gedacht leider bringt mir hier der compiler immer fehler.
hat da jemand ein tipp?
dankeint array[4]; int main() { array={4,7};//fehler vom compieler return 0; }
-
Warum initialisierst du nicht gleich "global"?
-
hmmm, du koenntest das machen:
int array[4]; int main(void) { memcpy(array, (const int[4]){4, 5, 6, 7}, sizeof(int) * 4); }
das (const int[4]){4, 5, 6, 7} dingens nennt sich compound-literal. der cast gehoert dazu und ist obligatorisch.
pass bei der memcpy sache auf, dass du genau die richtige menge bytes kopierst.compound literals haben lebensdauer auto oder static, wie normale arrays. einziges problem: wenn du die bei der erstellung nicht zu fassen kriegst (also nen pointer auf eines behaeltst), ist es naehzu nutzlos.
in dem fall oben (mein code), wird das neue {4,5,6,7} erstellt, die addresse an memcpy uebergeben, memcpy kopiert fleissig und danach hast du in <array> deine werte und das compound literal wird beim verlassen der umgebenden funktion aufgeloest.
-
TactX schrieb:
Warum initialisierst du nicht gleich "global"?
na weil die deklaration in wirklichkeit in nem header file ist und das von verschienden source (.c) files eingebunden wird...
da gehts bei verschiedenen compiler zwar dennoch mit initialisieren aber net bei allen ausserdem ist es net die feine englische art oder lieg ich da falsch?
-
andi235 schrieb:
TactX schrieb:
Warum initialisierst du nicht gleich "global"?
na weil die deklaration in wirklichkeit in nem header file ist und das von verschienden source (.c) files eingebunden wird...
da gehts bei verschiedenen compiler zwar dennoch mit initialisieren aber net bei allen ausserdem ist es net die feine englische art oder lieg ich da falsch?danke sieht ganz gut aus. Nur net ganz so easy wie ich gehofft hab.
-
weil die deklaration in nem header file ist und das von verschienden source files eingebunden wird
eigentlich definiert man die daten in einem source-file:
int array[]={1,2,3,4,5,6,...};
und im header die entsprechende deklaration:
extern int array[];