[C는 ++] 포인터 배열을 반환

  어레이는 복사 될 수 없으므로 함수 배열을 반환 할 수있다. 그러나, 함수 포인터 또는 참조의 배열을 반환 할 수있다. 다음은에 의해 반환 된 포인터 또는 참조의 배열입니다 :

타입 정의는 int로 ARRT가 [ 10 ]         // ARRT 별칭의 타입, 타입 (10)이 포함 된 정수들의 배열을 나타낸다 
은 USING ARRT = INT [ 10 ]           // ARRT 당량 문 
ARRT * FUNC ( INT I)            // FUNC은 10를 포함하는 정수 어레이에 대한 포인터를 리턴

상기 식에서 우리가 배열을 반환 할 수 없기 때문에,이 배열 유형 정의에 대한 포인터를 반환합니다, (10)의 정수를 포함 ARRT 별칭 배열입니다. 따라서 FUNC 함수는 INT 인수를 받아 10 개 정수 어레이에 대한 포인터를 리턴한다.

 

함수가 배열을 반환에 대한 포인터를 선언

INT ARR [ 10 ];         // ARR 10 개 정수 배열을 포함 
int 치 * PI는 [ 10 ];         // P1 포인터 (10)로 포함하고있는 배열이고 
지능 (* P2)는 [ 10 ] = ARR은;     // P2는 10을 포함하는 정수 어레이에 대한 포인터

 

우리는 함수가 배열을 반환에 대한 포인터를 정의하려면이 문은 동일한 크기이며, 배열은 함수 이름 뒤에 와야합니다. 그러나, 함수 매개 변수 목록은 배열의 차원을 선행되어야 함수 이름과 매개 변수 목록 뒤에이기도합니다. 따라서,이 함수는 아래 형태의 배열에 대한 포인터 리턴

유형 (* 함수 (parameter_list)) [측정]

다른 유사한 문장의 배열, 유형 요소의 유형은 차원 배열의 크기를 나타냅니다 나타냅니다. (* 함수 (patameter_list))는 우리가 정의한 바와 같이 브래킷의 양단이 때, P2와 동일하며, 브래킷의 양단에 존재해야한다. 이 브래킷없이, 함수의 리턴 형태는 포인터 배열이다.

  구체적인 예를 들면, 다음과 같은 문장은 함수 FUNC 유형 별칭을 사용하지 않습니다 :

  INT (* FUNC INT (I)) [10];

당신은 레이어에 의해 선언 층의 의미를 이해하기 위해 따를 수 있습니다 :

  • 함수를 호출 할 때 FUNC (INT의 I)는 INT의 FUNC 인자의 유형에 대한 필요성을 나타냈다.
  • (* Func을 (INT의 ⅰ)) 우리는 함수 호출의 결과의 표준 용액에 대한 작업을 수행 할 수 있다는 것을 의미한다.
  • (* Func을 (INT의 ⅰ)) [10] FUNC 통화를 나타내고 역 참조하여 어레이 (10)의 크기 일 것이다.
  • INT (* FUNC INT (I)) [10] int 형의 배열의 요소를 나타낸다.

 반환 형식 반대쪽 끝의 사용

  리턴 형의 단부 (반환형 후행)를 사용하고 대향하는 또 다른 방법은, 상술 한 FUNC 새로운 표준 C ++ 11에서 단순화 될 수있다. 모든 함수는 대향 단부를 반환하는 데 사용될 수 있지만,이 형태는 리턴 타입과 같은보다 복잡한 함수의 가장 효과적인 리턴 타입 정의하는 배열의 배열에 대한 참조 또는 포인터이다. > 기호의 시작 부분에 - 매개 변수 목록과 다시 함께 반환 형식의 반대쪽 끝에서. 진정한 함수 반환 유형을 표현하기 위해이 매개 변수 목록을 다음에, 우리는이에 장소 자동차의 반환 유형을 배치 나타납니다 :

자동 FUNC ( int로 된 I) -> INT (*) [ 10 ];

우리는 다음과 같은 형태로 함수 매개 변수 목록의 형식을 반환하기 때문에 함수는 포인터, 10 개 정수를 포함한 배열에 대한 포인터를 반환 FUNC, 그것을 명확하게 볼 수 있습니다.

사용 decltype

  우리가 알고있는 경우에 다른 경우, 함수는 배열을 가리 킵니다 포인터, 당신은 반환 유형을 선언 decltype 키워드를 사용할 수 있습니다 반환합니다. 예를 들어, 다음 함수 제가 하나 인 파라미터에 따라 두 개의 다른 공지 된 배열을 가리키는 포인터를 리턴

INT ODD [] = { 1. , 3. , 5. , 7. , 9. }
 int로 짝수 [] = { 0 , 2 , 4. , 6. , 8. }
 // 5 함유 정수 배열을 가리키는 포인터 리턴 
decltype을 (ODD) * arrPtr ( INT I) 
{ 
       (% I는 2 ) ODD :? 및 짝수;         
}

arrPtr 키워드 decltype 리턴 형 포인터, 포인터에 의해 표현되는 대상물 홀수의 유형과 일치한다. 배열은 홀수이기 때문에, 그렇게 arrPtr 다섯 개 정수를 포함하는 어레이에 대한 포인터를 리턴한다. 주의 할 곳이있다 : 결과는 arrPtr 포인터는 함수 선언에 * 기호를 추가해야합니다 반환 표현하기 위해, decltype의 배열입니다.

추천

출처www.cnblogs.com/lightmonster/p/10993977.html