2013-03-10 1 views
0

사과는 다소 무식한 초보자 질문입니다.코어 그래픽 함수/C 왜 호출 된 함수가 전송 된 배열을 채 웁니까?

CGDirectDisplayID displays[10]; 
uint32_t numDisplays; 

CGGetOnlineDisplayList(10, displays, &numDisplays); 

위 함수는 displays [] 배열을 채우고 numDisplays에 결과 (온라인 표시 수)를 반환합니다. 다음과 같이 헤더의 정의는 다음과 같습니다

CG_EXTERN CGError CGGetOnlineDisplayList(uint32_t maxDisplays, 
CGDirectDisplayID *onlineDisplays, uint32_t *displayCount) 
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_NA); 

우리가 '& numDisplays'사용하는 이유 이해 : 그것은 직접 변경할 수 있도록 우리가 기능을 변수의 주소를 부여됩니다. 그런데 배열과 같은 피연산자를 사용하지 않는 이유는 무엇입니까? numDisplays를 처리하는 것과 같은 방식으로 처리해야하지 않습니까? 함수에 주소를 전달하지 않을 때 함수는 배열을 채우는 것을 어떻게 관리합니까?

답변

2

같다?

우리입니다.

배열을 함수에 전달할 때 전달되는 배열의 내용이 아닙니다. 대신 배열의 첫 번째 요소에 대한 포인터가 전달됩니다. 우리는 배열이 포인터로 붕괴한다고 말합니다. 어쨌든 함수의 프로토 타입에서 알 수 있습니다.

&arr을 전달하면 기술적으로 동일한 포인터가되지만 다른 유형 (포인터로의 배열 인 uint32_t (*)[10])이되지만 포인터가있는 배열 일 때 배열에 대한 포인터를 전달합니다. to- (배열의 요소 유형)이 필요합니다. &을 사용하지 마십시오.

+1

추가하려면 함수 "GCGetOnlineDisplayList"에 배열에 포함 된 요소의 수 (이 경우 10 개)를 지정해야합니다. 배열의 시작 주소 만 인식하며 그 밖의 것은 없습니다. 첫 번째 매개 변수를 사용하여 크기를 결정합니다. – Inisheer

1

배열 붕괴 첫 번째 요소를 가리키는 포인터.

그래서 &display[0]; 어떻게 기능은 우리가 함수에 해당 주소를 통과하지 않을 때 배열을 채울 관리 않습니다 displays;

관련 문제