Zeiger auf Struct-Array



  • Hallo,

    ich habe ein Problem mit einem Zeiger auf Struct-Array. Habe in meinen Buch (C von A bis Z / Jürgen Wolf nichts passendes gefunden).
    Das Struct, was ich angelegt hab, soll die Werte wie folgt zur Verfügung stellen
    leds[0-n] {red = 255; green = 230; blue = 100};

    /* main.c */
    #include "sub.c"
    
    int main(void)
    {
    	const int NUM_LEDS = 8;
    	struct RGB
    	{
    		int red;
    		int green;
    		int blue;
    	};
    	RGB leds[NUM_LEDS];
    
    	while (1)
    	{
    		test(leds, NUM_LEDS);
    	}
    }
    
    /* sub.c */
    void test(int *ptr_Struct, int numFields)
    {
    	for (int i = 0; i < numFields; i++)
    	{
    		ptr_Struct[0] = 1; // wird falsch sein
    
    		// Möchte gerne hier wie folgt die Daten festlegen können
    		// ptr_Struct[0].red = Wert;
    		// ptr_Struct[0].green = Wert;
    		// ptr_Struct[0].blue = Wert;
    	}
    }
    


  • sschultewolter schrieb:

    ich habe ein Problem mit einem Zeiger auf Struct-Array. Habe in meinen Buch (C von A bis Z / Jürgen Wolf nichts passendes gefunden).

    http://www.c-plusplus.net/forum/272350-full

    Kommentare siehe unten.

    /* main.c */
    #include "sub.c"               // man inkludiert keine .c files, nur Header
    
    int main(void)
    {
    	const int NUM_LEDS = 8;
    	struct RGB
    	{
    		int red;
    		int green;
    		int blue;
    	};                     // warum in der main? du brauchst den Typ außerhalb
    	RGB leds[NUM_LEDS];    // Typ RGB ist nicht bekannt[1]
    
    	while (1)              // ich nehme mal an, das ist provisorisch
    	{
    		test(leds, NUM_LEDS);
    	}
    }
    
    /* sub.c */
    void test(int *ptr_Struct, int numFields)     // warum Zeiger auf int? 
                                                  // Du brauchst Zeiger auf struct RGB
    {
    	for (int i = 0; i < numFields; i++)
    	{
    		ptr_Struct[0] = 1; // wird falsch sein
    
    		// Möchte gerne hier wie folgt die Daten festlegen können
    		// ptr_Struct[0].red = Wert;
    		// ptr_Struct[0].green = Wert;
    		// ptr_Struct[0].blue = Wert;
    	}
    }
    

    Fußnote [1]: Das klappt, falls du einen C++-Compiler benutzt. C und C++ sind leicht inkompatibel, also solltest du versuchen, deinen Compiler in den C-Modus zu versetzen.



  • Zeile 13 muss geändert werden:

    struct RGB leds[NUM_LEDS;
    

    oder du kannst folgendes machen:

    typedef struct RGB {
        int red;
        int green;
        int blue;
    } RGB;
    

Log in to reply