2017-01-08 3 views
0

에 저장 나는 구조체의 X있어 : 나는 stucture 단지 포인터를 가지고있는 경우에포인터 구조체

struct x { 
    __s32 array[10]; 
}; 

가 어떻게 배열 x->array에 대한 포인터를 만들 수 있습니까?

+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. 

같은 다른 방법이 있지만, 특수한 경우에, 장 §6.7.2.1, 구조 및 노동 조합 지정자를 C11을 인용, 일반적으로 사용되는 방법입니다

[...] 적절히 변환 된 구조체 개체에 대한 포인터는 초기 구성원 (또는 해당 구성원이 비트 필드 인 경우 해당 개체가있는 단위)을 가리키며, 그 반대도 마찬가지입니다. 구조체 객체 내에는 이름이없는 패딩이있을 수 있지만 처음에는 패딩되지 않을 수 있습니다.

그래서 경우 배열 변수를 적절하게 적절한 형식으로 변환 구조 (상기 예에서와 같이 또는 단 부재) 제 1 부재, 구조 변수에 대한 포인터이며, 또한 가리킬 것이다 배열 멤버 변수의 시작 부분.

이 경우 (__s32 (*)[10])의 캐스트를 사용할 수 있습니다.

+1

그리고 그게 & someInstanceOfX 배열보다 낫다 어떻게? – immibis

+0

@immibis emmm..OK, 나는 이것이 더 나은 길로 여겨졌다는 것을 깨닫지 못했다. 나는 방금 생각한대로. –