У меня есть структура х:Указатель на массив хранится в структуры
struct x {
__s32 array[10];
};
Как я могу создать указатель на массив x->array
, если у меня есть только указатель на stucture?
У меня есть структура х:Указатель на массив хранится в структуры
struct x {
__s32 array[10];
};
Как я могу создать указатель на массив x->array
, если у меня есть только указатель на stucture?
Правильный путь
__s32 *pointer = x->array
Оно равно
__s32 *pointer = &(x->array[0])
@SouravGhosh Я подозреваю, что OP означает «указатель на первый элемент массива» –
Метод финишной прямой обычно используемый способ, так как
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])
.
И что лучше, чем & someInstanceOfX-> массив как? – immibis
@immibis emmm..OK, я не понимал, что это должно быть лучшим способом, я просто подумал об альтернативном пути. –
К *, которая * массив? –
'& (x-> array)' возможно? – Evert
@ HermannDöppes, может быть, это переменная элемента массива? –