Forum: Compiler & IDEs Problem mit Pointer und Struct


von Markus (Gast)


Lesenswert?

Hallo
Ich hab ein Problem mit folgendem Code:
1
#include <stdio.h>
2
3
typedef struct FOO_STRUCT {
4
  int item1;
5
  int item2;
6
  int item3;
7
} FOO_STRUCT;
8
9
FOO_STRUCT myStruct;
10
11
void foo()
12
{
13
  FOO_STRUCT *ptrMyStruct = &myStruct;
14
  printf("Ausgabe: %d\n", ptrMyStruct->item1);
15
  return;
16
}
17
18
int main(void)
19
{
20
  FOO_STRUCT myStruct = { 1, 11, 111};
21
  foo();
22
23
  return;
24
}
Die Ausgabe ist immer 0, ich verstehe jedoch nicht weshalb, da foo() ja 
im selben Scope aufgerufen wird wie myStruct Werte zugewiesen werden. 
Somit sollte doch auch in der Funktion foo() myStruct aus main() {..} 
sichtbar sein.

Wo liegt dabei der Fehler, wie kann ich den beheben? Besten Dank

von aw (Gast)


Lesenswert?

Markus schrieb:
> Wo liegt dabei der Fehler
Da:
> FOO_STRUCT myStruct = { 1, 11, 111};

Du definierst eine lokale Variable welche die globale in der main 
sozusagen überschreibt.

von g457 (Gast)


Lesenswert?

> FOO_STRUCT myStruct;
             ^^^^^^^^
>
> void foo()
> {
>  FOO_STRUCT *ptrMyStruct = &myStruct;
                              ^^^^^^^^

HTH

von Stefan E. (sternst)


Lesenswert?

Markus schrieb:
> da foo() ja
> im selben Scope aufgerufen wird wie myStruct Werte zugewiesen werden.
> Somit sollte doch auch in der Funktion foo() myStruct aus main() {..}
> sichtbar sein.

Nein. Lokale Variablen werden nicht über Funktionsaufrufe "vererbt". Das 
einzige myStruct, was foo sieht, ist das globale.

von aw (Gast)


Lesenswert?

aw schrieb:
> Markus schrieb:
>> Wo liegt dabei der Fehler
> Da:
>> FOO_STRUCT myStruct = { 1, 11, 111};
>
> Du definierst eine lokale Variable welche die globale in der main
> sozusagen überschreibt.
und 1,11,111 steht in der lokalen.

von fdssd (Gast)


Lesenswert?

warum nicht
1
typedef struct{
2
  int item1;
3
  int item2;
4
  int item3;
5
} FOO_STRUCT;
6
7
void foo( FOO_STRUCT *ptrMyStruct )
8
  printf("Ausgabe: %d\n", ptrMyStruct->item1);
9
  return;
10
}
11
12
int main(void)
13
{
14
  FOO_STRUCT myStruct = { 1, 11, 111};
15
  foo(&myStruct );
16
17
  return;
18
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.