2011-03-05 6 views
0

그래서이 구조체는 세 개의 NSPoint 구조로 구성됩니다.Array의 인덱스를 Struct의 멤버처럼 처리 할 수 ​​있습니까?

typedef struct AOTriangle_ { 
    NSPoint a; 
    NSPoint b; 
    NSPoint c; 
} AOTriangle; 

어떤 경우에는 포인트를 a, b, c 및 기타 사례로 색인을 참조하여 어레이에 참조하고자합니다. 그래서 같이

,

AOTriangle t; 
t.a = NSMakePoint(0,0); 
t.b = NSMakePoint(3,0); 
t.c = NSMakePoint(0,4); 

for(int i = 0; i < 3; ++i) { 
    t[i].x += 5.0; 
    t[i].y += 5.0; 
} 

이것은 내가 들어 왔 가장 가까운,하지만 당신은 내가 원하는 것을 정확히되지 않습니다 볼 수 있습니다. Objective-C에서이 작업을 수행 할 수 있습니까? 비슷한 것을 성취 할 때 제가 아래에서하는 것보다 더 좋은 방법인가요? 아마 노동 조합과 함께 할 수 있을까요?

typedef struct AOTriangle_ { 
    NSPoint a; 
    NSPoint b; 
    NSPoint c; 
} AOTriangle; 


AOTriangle t; 
t.a = NSMakePoint(0,0); 
t.b = NSMakePoint(3,0); 
t.c = NSMakePoint(0,4); 
NSPoint* t = (NSPoint*)&triangle; 
for(int i = 0; i < 3; ++i) { 
    t[i].x += 5.0; 
    t[i].y += 5.0; 
} 

답변

3

예, "union"을 사용할 수 있습니다. 내가 선언이 이런 식으로 뭔가를 갈 것이라고 믿는다

typedef struct AOTriangle_ { 
    union { 
     struct { 
      NSPoint a; 
      NSPoint b; 
      NSPoint c; 
     }; 
     NSPoint points[3]; 
    }; 
} AOTriangle; 

union는 기본적으로 "나는대로이 구조체의 멤버를 참조 할 수 있습니다 말하는 방법 중 하나 a, b, 또는 c, 또는 points[0], points[1]로, 또는 points[2] "

그리고 당신은 다음과 같이 사용합니다 :

AOTriangle t; 
t.a = NSMakePoint(0,0); 
t.b = NSMakePoint(3,0); 
t.c = NSMakePoint(0,4); 
for(int i = 0; i < 3; ++i) { 
    t.points[i].x += 5.0; 
    t.points[i].y += 5.0; 
} 
+0

노조는 거의 사용되지 않는다? 나는 그들에 대해 들어 본 적도 없으며 나는 한번도 본 적이 없다고 확신합니다. – kubi

+2

그들은 C에서 드물지 않습니다. 특히 낮은 수준의 프로그래밍. – robottobor

+1

@kubi 아주 작은 C 프로그래밍을 한 결과 일 수 있습니다. –