[C] Pointer auf Array

feldsalat

Grünschnabel
Hallo zusammen,

ich habe eine Funktion so deklariert:

Code:
int func(double *left[2], double *right[2])
{
*left = *right;
return 1;
}

left und right sind jeweils zweidimensionale arrays, die doubles enthalten.

nun möchte ich im Programm diese Funktion benutzen:
Code:
main()
{
double left[2];
double right[2];
int i;
....
i = func(&left, &right);
}

aber das geht nicht, ich habe irgendetwas falsch deklariert. ich bekomme "incompatible pointer type" als Warnung.
ich habe auch schon &left[0] probiert anstelle von &left, war aber auch nicht richtig.

ich würde mich sehr über einen Tip freuen :)

Liebe Grüße, Susanne
 
Hallo Susanne,
was genau soll denn die Funktion func machen?

Nur den ersten Wert kopieren?
Also so:
int func(double left[2], double right[2])
{
*left = *right;
return 1;
}

int main()
{
double left[2];
double right[2];
//left[0]=1.1;
//left[1]=1.2;
//right[0]=2.1;
//right[1]=2.2;
int i;
i = func(left, right);
//danach
//left[0]=2.1;
//left[1]=1.2;
//right[0]=2.1;
//right[1]=2.2;
return 0;
}

Oder etwas anderes?

MFG Rico
 
Zuletzt bearbeitet:
Hallo Rico,

nein, func macht noch einiges anderes, ich habe hier nur die relevanten Dinge aufgeschrieben. Es soll auch der gesamte Array kopiert werden, bzw. der Pointer umgesetzt werden, so dass hinterher *left == *right
außerdem brauche ich für den Rest von func auch direkten Zugriff auf *left[0], *left[1], *right[0], und *right[1].

Vielen Dank und liebe Grüße, Susanne
 
Hi,

bei Pointer auf Arrays hast du verschiedene Möglickeiten.

Code:
double  werte[] = { 1,2,3,5,8 };
double *pointer;

pointer = werte;

funktion(werte);           /* 1. Möglichkeit */
funktion(&werte[0]);   /* 2. Möglichkeit */
funktion(pointer);         /* 3. Möglichkeit */

und hier noch eine Anwendung

Code:
#include <stdio.h>

void funktion(double *array)
{
// dein Code
}

int main()
{
   double werte[] = { 1,2,3,5,8,13,21 };

   funktion(werte);

   return 0;
}

nun nur noch auf deinen Code anpassen und fertig.

Aber bitte auch versuchen zu verstehen :)
 
Hallo BOND_WR,

vielen Dank für Deine Antwort.

leider klappt das nicht ganz. Wenn ich nach Deinem Beispiel vorgehe bekomme ich die Fehlermeldung

"invalid type argument of `unary *' "

wenn ich dann innerhalb von func auf *left[0] und *left[1] zugreifen möchte.

gibt es dafür noch eine Lösung?

Liebe Grüße, Susanne
 
Hi,

nein, func macht noch einiges anderes, ich habe hier nur die relevanten Dinge aufgeschrieben. Es soll auch der gesamte Array kopiert werden, bzw. der Pointer umgesetzt werden, so dass hinterher *left == *right
außerdem brauche ich für den Rest von func auch direkten Zugriff auf *left[0], *left[1], *right[0], und *right[1].

Warum auf *left[0]? Reicht nicht left[0]?
In func kannst du doch mit dieser Funktion schon die Werte bearbeiten.
int func(double left[2], double right[2])
{
left[1]=3.0;
}
Ein anderes Beispiel ist im vorherigen Post von mir.

Es könnte aber auch so gehen, dass hängt davon ab, was du wirklich in der Funktion func machen möchtest!
int func(double *left[2], double *right[2])
{
*left = *right;
return 1;
}

int main()
{
double *left[2];
double *right[2];
...
int i;
i = func(left, right);
return 0;
}

MFG Rico
 
Zuletzt bearbeitet:
Hallo Rico,

Danke, jetzt läuft es. ich kann also auf *left zugreifen, aber auf die einzelnen Inhalte nur mit left[0], richtig?

Ich habe nur nicht verstanden, wieso ich left[0] innerhalb von func ändern kann und sie dann außerhalb auch geändert sind...

Vielen Dank und liebe Grüße, Susanne
 
Hi,

da du die Adresse von left (left entspricht &left[0] entspricht der Adresse der ersten Zelle) übergibst. Damit kann die Funktion func den Wert der in dieser Adresse steht ändern (mit left[0]=1 oder über *left=1 (*left entspricht *(&left[0]))).

MFG Rico
 
Zurück