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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.