2014-11-28 6 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은 (x, y, z)를 선택할 수있는 좌표의 유형을 선택합니다. index2은 변경할 좌표의 색인을 선택합니다.

이것은 작업중인 코드를 단순화 한 것입니다. 그러나 원리는 같습니다.

미리 감사드립니다.

편집 :

내가 잘못 코드를 작성했습니다. 혼란스럽게해서 죄송합니다.

+0

죄송합니다, 내 말은'coords' 객체가 함수에 작동하는 것을 test''에서 C. – user1806687

+1

에서? '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 
관련 문제