에 저장 나는 구조체의 X있어 : 나는 stucture 단지 포인터를 가지고있는 경우에포인터 구조체
struct x {
__s32 array[10];
};
가 어떻게 배열 x->array
에 대한 포인터를 만들 수 있습니까?
에 저장 나는 구조체의 X있어 : 나는 stucture 단지 포인터를 가지고있는 경우에포인터 구조체
struct x {
__s32 array[10];
};
가 어떻게 배열 x->array
에 대한 포인터를 만들 수 있습니까?
올바른 방법
__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.
같은 다른 방법이 있지만, 특수한 경우에, 장 §6.7.2.1, 구조 및 노동 조합 지정자를 C11
을 인용, 일반적으로 사용되는 방법입니다
[...] 적절히 변환 된 구조체 개체에 대한 포인터는 초기 구성원 (또는 해당 구성원이 비트 필드 인 경우 해당 개체가있는 단위)을 가리키며, 그 반대도 마찬가지입니다. 구조체 객체 내에는 이름이없는 패딩이있을 수 있지만 처음에는 패딩되지 않을 수 있습니다.
그래서 경우 배열 변수를 적절하게 적절한 형식으로 변환 구조 (상기 예에서와 같이 또는 단 부재) 제 1 부재, 구조 변수에 대한 포인터이며, 또한 가리킬 것이다 배열 멤버 변수의 시작 부분.
이 경우 (__s32 (*)[10])
의 캐스트를 사용할 수 있습니다.
그리고 그게 & someInstanceOfX 배열보다 낫다 어떻게? – immibis
@immibis emmm..OK, 나는 이것이 더 나은 길로 여겨졌다는 것을 깨닫지 못했다. 나는 방금 생각한대로. –
에 * 배열과 동일하다? –
'& (x-> array)'아마도? – Evert
@ HermannDöppes 어쩌면 배열 구성원 변수일까요? –