Zugriff auf mehrdimensionales array

Gast #2211357
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
Gast #2211395
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... :)
#2211420
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.
Gast #2211430
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.