2016-04-21 4 views
0

Помогите с вопросом ниже по указателям на массивы. У меня есть 20 массивов, каждый из которых длиной 350 элементов. Мне нужно передать адрес select 3 из 20 массивов в массив указателей. Затем в моем коде мне нужно получить доступ к отдельным элементам в массивах в массиве указателей. Однако я не уверен относительно синтаксиса, пожалуйста, прокомментируйте, правильно ли указано ниже.Передача массивов в массив указателей в 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

Не ответ: '20 массивов, каждый из которых 350 элементов, почему вы не используете 2-й массив? –

+0

Сам массив должен быть указателем, не так ли? – Rolice

+0

@Rolice Никакой массив не является указателем. Он истощает указатель, если используется в выражении или передается как аргумент функции. –

ответ

2

Выражение *ptr_Array[1]+55 неправильно несколько раз, из-за operator precedence.

Компилятор видит его как (*(ptr_Array[1]))+55, то есть он принимает второй указатель в ptr_Array и разыгрывает его, чтобы получить первое значение, и добавьте 55 к этому значению, которое не то, что вы хотите. Вам нужно явно использовать круглые скобки, такие как *(ptr_Array[1]+55). Или просто ptr_Array[1][55].


И вы должны действительно рассмотреть комментарий Мохита Джаина. Вместо того, чтобы иметь 20 разных переменных, просто используйте один:

unsigned short Graph[20][350]; 
2

*ptr_Array[0] = &Graph6; неправ. Оно должно быть:

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

Тип ptr_Array является array 3 of pointer to unsigned short. ptr_Array[0] имеет тип pointer to unsigned short и *ptr_Array имеет тип unsigned short.

Тип Graph6 является array 350 of unsigned short, который истощать к pointer to unsigned short, если используется в выражении.


Varriable1 = *ptr_Array[1]+55 также неверно. Для того, чтобы передать 55-й элемент, используйте

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

Неправильная причина '& Graph6' заключается в том, что тип' & Graph6' является 'unsigned short (*) [350]' (указатель на массив из 350 'unsigned short'), тогда как каждый элемент' ptr_Array' предназначен для быть «unsigned short *», и эти два типа заметно отличаются друг от друга - вот почему компилятор жалуется на несоответствия типа указателя. –

+0

'Varriable1 = * ptr_Array [1] [55];' должен быть 'Varriable1 = ptr_Array [1] [55];' –

+0

@RishikeshRaje Вы правы, спасибо. –

Смежные вопросы