Call by reference mit Enumeration möglich?

Gast #2071476
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 #2071498
Du musst ja auch einen Zeiger auf eine Variable übergeben, Zeiger auf 
Literale gibts nicht.
1
int main()
2
{
3
     menu_liste m = menu1;
4
     menu_auswahl(&m);
5
}
Gast #2071499
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
@ 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!
#2071706
C-Beginner schrieb:
1
>       menu1 = (int) 1,

Das (int) ist überflüssig, die Zahl 1 ist genau dies bereits.

Eine "lvalue" ist vom Begriff her etwas, dem man etwas zuweisen kann, 
also was links von einer Zuweisung stehen kann: "left value". Was in 
diesem Fall leider etwas unglücklich gewählt ist, weil es hier eher 
darum geht, davon eine Adresse ermitteln zu können.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.