Forum: Mikrocontroller und Digitale Elektronik Zugriff auf mehrdimensionales array


von Spexx53 (Gast)


Lesenswert?

Hallo,
ich habe so ein Konstrukt:
1
void func(unsigned char *array1, unsigned char *indexOfArray1,unsigned char *array2)
2
{
3
4
   if(array1[indexOfArray1]==1)
5
   {
6
     *array2[0][indexOfArray1]=1;
7
8
   }
9
    else if(array1[indexOfArray1]==2)
10
    {
11
     *array2[0][indexOfArray1+1]=2;
12
13
    }
14
15
...
16
17
18
}
19
20
21
int main(void)
22
23
{
24
 unsigned char array1[3]={3,2,1};
25
 unsigned char indexOfArray1[3]={1,2,3};
26
 unsigned char array2[2][2]={{0,0},{0,0}};
27
28
 func(array1,indexOfArray1,array2[2]);
29
30
31
}

und mein Compiler meckert bei "*array2[0][indexOfArray1]=1;", dass der 
Ausdruck ein "pointer-to-object type" sein soll.
Kann mir jemand sagen was da falsch läuft?

Viele Grüße

von Spexx53 (Gast)


Lesenswert?

1
void func(unsigned char *array1, unsigned char *indexOfArray1,unsigned char *array2)
2
{
3
4
   if(array1[indexOfArray1]==1)
5
   {
6
     *array2[0][indexOfArray1]=1;
7
8
   }
9
    else if(array1[indexOfArray1]==2)
10
    {
11
     *array2[0][indexOfArray1+1]=2;
12
13
    }
14
15
...
16
17
18
}
19
20
21
int main(void)
22
23
{
24
struct
25
{
26
 unsigned char array1[3];
27
 unsigned char indexOfArray1[3];
28
}Struct1={{3,2,1},{1,2,3}};
29
30
struct
31
{
32
 unsigned char array2[2][2];
33
...
34
}Struct2={{{0,0},{0,0}},...};
35
36
37
38
 func(Struct1.array1,Struct1.indexOfArray1,Struct2.array2[2]);
39
40
41
}

Sorry, da ist mir ein Fehler unterlaufen. Jetzt macht die Fehlermeldung 
"pointer-to-object type" erst Sinn... :)

von Michael F. (startrekmichi)


Lesenswert?

In der Funktion dereferenzierst du viel zu oft, denn ein char* kannst du 
nur einmal dereferenzieren, sprich einmal *array2 oder array2[x].

     array2[indexOfArray1]=1;

Das sollte gehen, auch wenn man das wahrscheinlich deutlich einfacher 
schreiben könnte. Kommt aber drauf an wofür die Funktion sonst noch 
verwendet wird.

EDIT:
Und noch was ganz anders übersehen:
indexOfArray1 ist ein Pointer!
d.h. du musst
     array2[*indexOfArray1]=1;
schreiben.

Die Funktion sieht irgendwie insgesamt etwas seltsam aus. Schreib mal, 
was du wirklich vor hast, dann kann man das ev besser schreiben.

von Spexx53 (Gast)


Lesenswert?

Michael Frangenberg schrieb:
> In der Funktion dereferenzierst du viel zu oft, denn ein char* kannst du
> nur einmal dereferenzieren, sprich einmal *array2 oder array2[x].

Das sehe ich ein.
Aber was ist, wenn ich tatsächlich
1
//hier ohne dereferenzierung
2
array2[0][indexOfArray1]=1;
3
4
//oder 
5
6
//hier ohne dereferenzierung
7
array2[1][indexOfArray1]=1;
benötige?

von kERNEL (Gast)


Lesenswert?

Warum nicht das mehrdimensionale feld als Parameter angeben:

int func (..., ar[][], int ct, ...);

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.