seltsames switch Konstrukt



  • Hallo, ich habe in einem Sourcecode folgende Programmstruktur gesehen, welche ich nicht verstehe:

    char *strings[256] =
    {
    	"string1",
    
    	"string2",
    };
    
    void irgendeineFunktion (void)
    {
    	int einInteger;
    
            // weiterer Code bei dem die Variable einInteger zugewiesen wird
    
    	switch (einInteger)
    	{
    	 default:
                    //mach irgendwas
    		break;
    
             case string1:
                    //mach irgendwas
                    break;
    
    	 case string2:
    		//mach irgendwas
    		break;
            }
    }
    

    Was ist das in den ersten Zeilen für ein Datentyp der dort deklariert wird? Ich verstehe diese Deklaration nicht. Und warum wird hier als switch-Variable ein Integer genommen, aber die Fälle sind die Strings aus dem vorher deklarierten Datentyp?

    Dankeschön schonmal im Voraus!



  • Hat sich erledigt, hab in einer Headerdatei ein enum entdeckt, deren Elemente exakt den gleichen Namen haben wie in der obigen deklaration, ist also alles richtig so.

    Trotzdem würd mich interessieren, was genau da oben deklariert wird. Das versteh ich nämlich trotzdem nicht.



  • Wenn dir der Begriff Zeiger (bzw. Pointer) nichts sagt, dann schau mal in diesen Artikel: http://www.c-plusplus.net/forum/viewtopic-var-p-is-1806837.html

    Dort wird ein Array von 256 Strings (Zeiger auf nullterminierte Chars) definiert.
    Und mit dem von dir erwähnten 'enum' wird jeder einzelne String dieses Arrays benannt, so daß man dann einfach den richtigen String ermitteln kann:

    enum Texte { string1, string2 /*, ...*/ };
    
    enum Texte text = string1;
    
    printf("%s", strings[text]);
    


  • Es ist genau so gemeint wie es dort steht. Ein Array (quasi eine Liste) von Character Pointern (quasi Strings). Die Zahl 256 im Array ist ziemlicher Quatsch, der C-Compiler kann selbst zählen wie viele char * gegeben sind.

    Beispiele:

    int ia[] = {1, 5, 9, 234567}; //Liste von 4 ints
    char bla[] = "Hallo"; //liste von 6 chars, 5 für Hallo und 1 fürs '\0'-Zeichen
    char blup[] = {'H', 'a', 'l', 'l', 'o', '\n'}; //dasselbe wie bla nur umständlicher
    KOMISCHERVARTYP ka[15]; //legt ein Array für 15 KOMISCHERVARTYP-Variablen an
    //hier muss die 15 stehen, weil dem Compiler nicht gesagt wird welche Daten im Array stehen sollen
    KOMISCHERVARTYP *k1;
    KOMISCHERVARTYP *k2;
    KOMISCHERVARTYP *k3;
    KOMISCHERVARTYP *ka2[] = {k1, k2, k3}; //Array aus 3 KOMISCHERVARTYP-Pointern
    unsigned long *****ulppppp[17]; //Array bestehend aus 17 unsigned long *****-Variablen
    int ca[10] = {1, 5, 19}; //Array aus 10 ints, wobei in den ersten 3 ints Werte stehen und im Rest irgendwas steht
    

    Ich hoffe die Beispiele helfen.


Log in to reply