Call by reference mit Enumeration möglich?

Gast #2071476
Lesenswert?

Hallo Leute!

Ich beschäftige mich gerade mit Funktionen deren Werte unterschiedlich 
übergeben werden können. Das erste Beispiel wäre den Wert übergeben 
siehe dazu Fall 1). Das erste Beispiel funktioniert wunderbar. Aber wenn 
ichs versuche mit einem Zeiger zu übergeben (Fall 2), dann meckert der 
gcc compiler. Die Fehlermeldung sagt mir, dass "menue_liste" und "int" 
nicht kompatibel ist und ein "lvalue" sein muss, was es auch immer sein 
mag.

Könnte mir ein Erfahrener sagen, woran es hapern könnte? Muss die 
enumeration "menu_liste" ein Zeiger sein? Ich versuchte es auch mit 
einem Zeiger, aber er gibt mir immer die gleiche Meldung.
Ich bedanke mich für eure Antworten schon im voraus!

Fall 1) Funktioniert mit Übergabe
1
#include <stdio.h>
2
  typedef enum
3
    {
4
      menu1 = (int) 1,
5
      menu3 = (int) 3,
6
      menu5 = (int) 5,
7
    } menu_liste;
8

9
void menu_auswahl(menu_liste menux)
10
  {
11
    if (menux == 1)
12
      {
13
        printf("Menue 1 wurde gewaehlt!");
14
      }
15
  }
16

17

18
int main()
19
{
20
     menu_auswahl(menu1);
21
}

Fall 2) geht nicht (Zeiger)
1
#include <stdio.h>
2
  typedef enum
3
    {
4
      menu1 = (int) 1,
5
      menu3 = (int) 3,
6
      menu5 = (int) 5,
7
    } menu_liste;
8

9
void menu_auswahl(menu_liste *menux)
10
  {
11
    if (menux == 1)
12
      {
13
        printf("Menue 1 wurde gewaehlt!");
14
      }
15
  }
16

17

18
int main()
19
{
20
     menu_auswahl(&menu1);
21
}
Gast #2071499
Lesenswert?

Bei dem zweiten Beispiel liegt der Fehler darin, dass menu1 keine 
Variable ist. Also kannst du auch keinen Pointer davon erzeugen. was 
funktionieren würde:
1
menu_liste menuP = menu1;
2
menu_auswahl(&menuP);
Gast #2071558
Lesenswert?

@ Andreas & Markus

Danke für eure Hinweise. Ich dachte die ganze Zeit, dass "menu1, menu_3 
und menu_5" Variablen mit einem konstatem Wert sind.
Eure Codezeilen konnte ich gleich testen und war gleich damit 
erfoglreich.

Thx ihr beiden!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren