Pointer übergabe Problem

Gast #2161125
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
}
Gast #2161142
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.
Gast #2161182
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?
Gast #2161221
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).

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