Forum: Compiler & IDEs Pointer übergabe Problem


von C_Anfänger (Gast)


Lesenswert?

Ich Habe eine Frage. ICh möchte daten von meiner Main.c an eine SCI.c 
übergeben.Ich glaube wie ich das mache habe ich verstanden.Jetzt möchte 
ich die Daten aber in SCI.c noch an eine Unterfunktion 
weitergeben.Leider habe ich das noch nie gemacht kann mir einer sagen 
wie das gehen würde?ICh habe mal ein Beispiel wie ich es mir bisher 
gedacht haben:
1
Main.c
2
struct Data
3
{
4
 int a;
5
 int b;
6
 int c;
7
}
8
9
int Main()
10
{
11
 struct Data SCIData;
12
13
 SCIMaun(&SCIData);
14
}
15
16
SCI.c
17
SCIMain(struct Data *SCIData)
18
{
19
 if(SCIData->a !=5)
20
 {
21
   So hier würde ich gerne eine weitere funktion aufrufen wo ich SCIData benutzen kann. Wie mache ich das?
22
 }
23
}

von Tobi (Gast)


Lesenswert?

Versteh ich dich richtig?
1
irgeneine_funktion(struct Data *dat);
2
3
SCIMain(struct Data *SCIData)
4
{
5
 if(SCIData->a !=5)
6
 {
7
   irgendeine_funktion(SCIData);
8
 }
9
}

von 123gast (Gast)


Lesenswert?

>So hier würde ich gerne eine weitere funktion aufrufen wo ich SCIData
>benutzen kann.

Dann tu das doch...
1
SCIMain(struct Data *SCIData)
2
{
3
 if(SCIData->a !=5)
4
 {
5
   weitere_Funktion(SCIData);
6
 }
7
}
8
9
void weitere_Funktion(struct Data * foo)
10
{
11
  //tu was
12
}

Natürlich müssen die Funktionen und Datentypen an den passenden Stellen 
definiert sein, sonst gibts Ärger mit dem Compiler.


Und gaaaaaanz wichtig: Typedefs mit "_t" abschließen:
1
typedef struct
2
{
3
  ...
4
} Data_t;
Erhöht die Übersichtlichkeit ganz enorm.

von C_Anfänger (Gast)


Lesenswert?

Oh ich dachte ich müste dann mit doppelt Pointer oder so arbeiten.

von 123gast (Gast)


Lesenswert?

C_Anfänger schrieb:
> Oh ich dachte ich müste dann mit doppelt Pointer oder so arbeiten.

Nö, wieso?
Klar, du kannst dir das Leben schwer machen, aber wenn es einfacher 
geht...

von C_Anfänger (Gast)


Lesenswert?

Noch eine Frage wenn ich nun ein array von dem struct erstellen wurde 
sehe es ja so aus.

Main.c
struct Data
{
 int a;
 int b;
 int c;
}

int Main()
{
 struct Data SCIData[4];

 SCIMaun(&SCIData);
}

SCI.c
SCIMain(struct Data *SCIData)
{
 if(SCIData[0]->a !=5)
 {
   weitere_Funktion(SCIData);
 }
}
Kann ich jetzt in weiter_Funktion auch auf SCIData[3]
einfach zugreifen?

von 123gast (Gast)


Lesenswert?

C-Code bitte in [c ] <...> [/c ] einfassen (ohne Leerzeichen).

Erster Hinweis: Kauf dir ein C-Buch und arbeite es durch. Du wirst es 
brauchen!!! Tipp: 
http://www.amazon.de/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=sr_1_1?ie=UTF8&qid=1303908074&sr=8-1 
(Vorsicht, IMHO nichts für absolute Programmieranfänger).

Zweitens: Ich schrieb
>Und gaaaaaanz wichtig: Typedefs mit "_t" abschließen
Ist zwar richtig, aber du benutzt im aktuellen Code keine typedefs. 
Sorry, zu schnell gelesen bzw. von der Gewohnheit leiten lassen.

Zum eig. Problem:
1
struct Data
2
{
3
 int a;
4
 int b;
5
 int c;
6
}
7
8
int Main()
9
{
10
 struct Data SCIData[4];
11
12
 //Das soll wohl Mai(!)n heissen...
13
 SCIMain(SCIData); //SCIData ist bereits ein Pointer auf das erste Array-Element.
14
}
15
16
17
//SCIMain könnte einen Rückgabewert bzw. Typ vertragen...
18
void SCIMain(struct Data *SCIData) // oder struct Data SCIData[]
19
{
20
 if(SCIData[0].a !=5) // oder (SCIData+0)->a
21
 {
22
   weitere_Funktion(SCIData);
23
 }
24
}
25
26
void weitere_Funktion (struct Data SCIData[])
27
{
28
  SCIData[3].a=42;
29
}
Sollte passen, aber ohne Gewähr (Irren ist menschlich).

von ET-Tutorials (Gast)


Lesenswert?

Ich habe einmal versucht, eine einfache Erklärung zu Pointern in einem 
Video unterzubringen.
Vielleicht hilft das:
http://et-tutorials.de/3368/pointer-in-c/

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.