2017-01-08 4 views
0

У меня есть структура х:Указатель на массив хранится в структуры

struct x { 
    __s32 array[10]; 
}; 

Как я могу создать указатель на массив x->array, если у меня есть только указатель на stucture?

+1

К *, которая * массив? –

+1

'& (x-> array)' возможно? – Evert

+0

@ HermannDöppes, может быть, это переменная элемента массива? –

ответ

1

Правильный путь

__s32 *pointer = x->array 

Оно равно

__s32 *pointer = &(x->array[0]) 
+1

@SouravGhosh Я подозреваю, что OP означает «указатель на первый элемент массива» –

2

Метод финишной прямой обычно используемый способ, так как

struct x * ptr = NULL; 
//allocation 
__s32 * otherPtr = ptr->array; //array name decays to pointer to first member 
__s32 (*p) [10] = &(ptr->array); // pointer to whole array. 

В противном случае, есть еще один способ, но для специализированных случаев, цитируя C11, глава §6.7.2.1, Структура и накидные спецификаторов

[...] Указатель на объект структурной структуры , соответствующим образом преобразованный, указывает на его исходный элемент (или если этот элемент является битовым полем , а затем к единице, в которой он находится), d наоборот. В структурном объекте может быть не указано , но не в начале.

Таким образом, в случае, переменная массива является первым членом (или единственным членом, как показано в приведенном выше примере) структуры, указатель на переменную структуру, соответствующим образом преобразованы в соответствующий тип, также будет указывать на начало переменной элемента массива.

В этом случае вы можете использовать листинг (__s32 (*)[10]).

+1

И что лучше, чем & someInstanceOfX-> массив как? – immibis

+0

@immibis emmm..OK, я не понимал, что это должно быть лучшим способом, я просто подумал об альтернативном пути. –

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