Wie array in einem struct initialisieren?



  • Hallo Leute,

    ich habe folgendes Problem:

    Ich habe einen struct mit (neben anderen Datentypen) einem array.
    Ich möchte dieses array mit einem Mal mit Werten initialisieren (einzeln mit einer for-Schleife klappt es wunderbar) aber mein Compiler hat immer etwas dagegen.

    #include <stdio.h>
    
    struct example {
    	int value;
    	int array[8];
    
    };
    
    int main(int argc, char *argv[])
    {
    	int i;
    
    	int array[16] = {1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8};
    
    	struct example one;
    	one.value=10;
    	one.array[] = {1,1,2,2,3,3,4,4};
    
    	printf ("\n struct Wert: %i ", one.value);
    	for (i=0; i<8; i++)
    	{
    		printf("\n struct arrayWerte: %i ", one.array[i]);
    		printf("\n struct arrayWerte: %i ", array[i]);
    	}
    
    	return 0;
    }
    

    Was mache ich falsch?



  • Was du versuchst, ist keine initialisierung, sondern eine Zuweisung.
    Und man kann ein array keinem anderen zuweisen.



  • Dankeschön erstmal,
    aber ich habe wahrscheinlich falshc ausgedrückt, deswegen versuche ich es nochmal:

    Ich erstelle eine Strukturvariable vom Typ struct example und wollte dann das array darin mit Werten belegen (ich dachte das ist initialisieren 🙂 )

    Ich habe den Code auch nochmal zum besseren Verständnis umgeschrieben:

    #include <stdio.h>
    
    struct example {
    	int value;
    	int array[8];
    };
    
    int main(int argc, char *argv[])
    {
    	int i;
    
    	struct example one;
    	one.value = 10;
    	one.array[] = {1,2,3,4,5,6,7,8};	/* Fehlermeldung Compiler */
    
    	printf ("\n struct Wert: %i ", one.value);
    	for (i=0; i<8; i++)
    	{
    		printf("\n struct arrayWerte: %i ", one.array[i]);
    	}
    
    	return 0;
    }
    

    muß ich also das doch über die for-Schleife machen, oder hat jemand eine bessere Idee?

    Danke nochmal



  • Mach doch einfach einen Konstruktor in deinen Struct.

    struct example {
        int value;
        int array[8];
        example(int nValue, int* pnArray){
          value = nValue;
          memcpy(&array, pnArray, sizeof(int)*8);
        };
    };
    


  • Das ist C++.

    Wie wäre es mit:

    struct example one = {10, {1, 2, 3, 4, 5, 6, 7, 8}};
    


  • hagenb schrieb:

    one.array[] = {1,2,3,4,5,6,7,8};	/* Fehlermeldung Compiler */
    

    Eben das ist keine Initialisierung, sondern, wie Shade schon schrieb, eine Zuweisung.



  • Hallo Leute,

    ich gebe mich geschlagen, es wird wohl doch eine Zuweisung sein.
    Habe da wohl meine C/C++ Referenz falsch verstanden. 😉

    Trotzdem würde mich interessieren, wie man so eine komplette array-Zuweisung machen kann.

    @YASC

    Vielen Dank, der Code funzt wunderbar!

    Hagen



  • hagenb schrieb:

    Trotzdem würde mich interessieren, wie man so eine komplette array-Zuweisung machen kann.

    wenn du das array mit lauter gleichen werten füllen willst, dann memset ansonsten per hand

    Array[10];
    
    for(int i; i < 10; i++)
    {
    	Array[i] = i;
    }
    


  • ich frage mich gerade welche Werte ein Array hat das nur "halb" initialisiert wird:

    #include <stdio.h>
    
    void foo(void)
    {
    	int counter;
    	int Array[10] = {3, 4, 1321, 2};
    
    	for(counter = 0; counter < 10; counter++)
    	{
    		printf("%d\n", Array[counter]);
    	}
    }
    
    int main(void)
    {
    	foo();
    	return 0;
    }
    

    Ersaunlicherweiße sind die Elemente 5 bis 9 des Arrays mit Nullen belegt und nicht mit irgendwelchen schwachsinnigen Werten - Zufall oder ist das so festgelegt?



  • Vertexwahn schrieb:

    Ersaunlicherweiße sind die Elemente 5 bis 9 des Arrays mit Nullen belegt und nicht mit irgendwelchen schwachsinnigen Werten - Zufall oder ist das so festgelegt?

    Ist so festgelegt:

    C++ lernen und Profesionell anwenden schrieb:

    [...}Ist die Länge des Vektors angegeben, jedoch größer als die Anzahl der Initialisierungswerte, so werden die restlichen Vektorelemente mit 0 belegt. [...]

    Caipi



  • hab ich bisher gar nicht gewusst... wie wird den ein Array im Speicher abgelegt? gibt es da padding bytes oder sonstige Schweinereien?



  • Bei 'nem Array gibt's garantiert keine Padding Bytes.



  • Vertexwahn schrieb:

    wenn du das array mit lauter gleichen werten füllen willst, dann memset

    Und wie soll das gehen? Gib mir doch einfach mal ein Beispiel, wie du alle Elemente des Arrays mit memset auf 1 setzt.
    memset funktioniert nur sinnvoll mit unsigned char (bzw. char / signed char) Arrays.



  • groovemaster schrieb:

    Und wie soll das gehen? Gib mir doch einfach mal ein Beispiel, wie du alle Elemente des Arrays mit memset auf 1 setzt.

    ups... stimmt sorry - geht natürlich nur für den Wert 0


Anmelden zum Antworten