2016-04-21 15 views
0

Bitte helfen Sie mit der folgenden Frage über Zeiger auf Arrays. Ich habe 20 Arrays, die jeweils 350 Elemente lang sind. Ich muss die Adresse einer Auswahl 3 aus den 20 Arrays an ein Array von Zeigern übergeben. Dann später in meinem Code muss ich auf einzelne Elemente innerhalb der Arrays innerhalb des Arrays von Zeigern zugreifen. Allerdings bin ich mir bezüglich der Syntax unsicher, bitte kommentieren Sie, ob das Folgende stimmt.Übergeben von Arrays in ein Array von Zeigern in C

unsigned short  Graph1[350]; 
unsigned short  Graph2[350]; 
unsigned short  Graph3[350]; 
...  ...   ... 
unsigned short  Graph19 [350]; 
unsigned short  Graph20 [350]; 
unsigned short  *ptr_Array[3]; 
... 
*ptr_Array[0] = &Graph6; // Passing the address of array Graph6, into the array of pointers. 
*ptr_Array[1] = &Graph11; // Passing the address of array Graph11, into the array of pointers. 
*ptr_Array[2] = &Graph14; // Passing the address of array Graph14, into the array of pointers. 
... 
Varriable1 = *ptr_Array[1]+55 // Trying to pass the 55th element of Graph11 into Varriable1. 
+3

Keine Antwort: '20 Arrays, die jeweils 350 Elemente sind, warum verwenden Sie nicht 2-D-Array? –

+0

Das Array selbst sollte ein Zeiger sein, nicht wahr? – Rolice

+0

@Rolice Kein Array ist kein Zeiger. Es wird an einen Zeiger zurückgegeben, wenn es in Ausdruck verwendet oder als Argument zur Funktion übergeben wird. –

Antwort

2

Der Ausdruck *ptr_Array[1]+55 ist falsch mehrfach wegen operator precedence.

Der Compiler sieht es als (*(ptr_Array[1]))+55, das heißt, es dauert der zweite Zeiger in ptr_Array und dereferenziert es, um den ersten Wert zu erhalten, und 55 zu diesem Wert hinzufügen, was nicht das ist, was Sie wollen. Sie müssen explizit Klammern wie *(ptr_Array[1]+55) verwenden. Oder einfach ptr_Array[1][55].


Und Sie sollten wirklich den Kommentar von Mohit Jain berücksichtigen. Anstelle von 20 verschiedenen Variablen, verwenden Sie einfach eine:

2

*ptr_Array[0] = &Graph6; ist falsch. Es sollte sein:

ptr_Array[0] = Graph6; /* or &Graph6[0] */ 

Typ ptr_Array ist array 3 of pointer to unsigned short. ptr_Array[0] hat Typ pointer to unsigned short und *ptr_Array hat Typ unsigned short.

Typ Graph6 ist array 350 of unsigned short die -pointer to unsigned short führen wird, wenn in einem Ausdruck verwendet.


Varriable1 = *ptr_Array[1]+55 ist auch falsch. Um die 55 th Element übergeben, verwenden

Varriable1 = ptr_Array[1][55]; 
+1

Ein Grund, dass '& Graph6' falsch ist, ist, dass der Typ von' & Graph6' 'unsigned short (*) [350]' (Zeiger auf ein Array von 350 'unsigned short') ist, während jedes Element von' ptr_Array' gemeint ist sei ein 'unsigned short *', und die beiden Typen sind sichtlich ziemlich unterschiedlich - weshalb sich der Compiler über die nicht übereinstimmenden Zeigerarten beschwert. –

+0

'Varriable1 = * ptr_Array [1] [55];' sollte 'Varriable1 = ptr_Array [1] [55] sein;' –

+0

@RishikeshRaje Sie haben Recht, danke. –