2014-11-28 3 views
0

Как я могу сделать указатель на член структуры, который представляет собой массив из int. Это как структура выглядит следующим образом:Указатель на массив структур

typedef struct { 
    volatile int x[COORD_MAX]; 
    volatile int y[COORD_MAX]; 
    volatile int z[COORD_MAX]; 
    //... other variables 
} coords; 

coords abc; 

abc является глобальной переменной. Теперь я хотел бы получить указатели на массивы x, y и z и сохранить их в другом массиве. Затем присоединяется к ним через передачу желаемого индекса. Вот что я имею в виду:

void test(int index1, int index2) 
{ 
    static volatile const int* coords_ptr[3] = {abc.x, abc.y, abc.z}; 
    coords_ptr[index1][index2] = 100; 
} 

Так index1 будет выбрать, какой тип координат, чтобы выбрать из (х, у, г). И index2 будет выбирать, какой индекс координат менять.

Обратите внимание, что это просто упрощение кода, над которым я работаю. Но принцип тот же.

Заранее благодарен!

EDIT:

Я написал неверный код. Извините за путаницу, это должно быть прямо сейчас.

+0

Извините за сумбур, я имею в виду С. – user1806687

+1

В 'test', чем' coords' объект функции, работающей на? 'coords' - это тип, а не объект. – nneonneo

+0

@nneonneo Компилятор не был счастлив, потому что x, y и z нестабильны, поэтому мне нужно было добавить его туда. Это неправильно? – user1806687

ответ

1

Есть только одна небольшая ошибка: вы указали указатели на const volatile int, что мешает вам писать им.

Просто напишите

static volatile int* coords_ptr[3] = {abc.x, abc.y, abc.z}; 

, и он будет работать.

1
#include <stdio.h> 

#define COORD_MAX 3 

typedef struct { 
    volatile int x[COORD_MAX]; 
    volatile int y[COORD_MAX]; 
    volatile int z[COORD_MAX]; 
} coords; 

coords abc; 

void test(int index1, int index2) 
{ 
    static volatile int* coords_ptr[3] = {abc.x, abc.y, abc.z}; 
    coords_ptr[index1][index2] = 100; 
} 

int main() 
{ 
    test(0, 0); 
    test(1, 1); 
    printf("%i %i\n", abc.x[0], abc.y[1]); 
    return 0; 
} 

выход:

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