2010-06-09 5 views
5

:C++에서 알려진 크기의 배열을 반환합니까? I는 공지 된 크기의 배열을 전달할 수 있다면

void fn(int(*intArray)[4]) 
{ 
    (*intArray)[0] = 7; 
} 

이유는 하나의 반환 할 수 여기

int intArray[4] = {0}; 
int(*)[4] fn() 
{ 
    return &intArray; 
} 

에서,이 ")"에서 "는 (*)"생성 " 구문 오류 :) ".

+0

알려진 크기의 배열에 대한 포인터를 전달 중입니다. C++에서 참조를 역 참조하지 않고 배열처럼 동작하는 참조가 더 나을 수도 있습니다. –

답변

4

[4]은 변수 정의에서 변수 이름 뒤에가는 것처럼, 함수 이름 뒤에 이동이 매우 모호한 구문은 이후로,

int (*fn())[4] 
{ 
    return &intArray; 
} 

경향 그것을 읽는 모든 사람에게 혼란 스럽기 때문에 배열에 대한 포인터가 필요한 특별한 이유가 없다면 배열을 간단한 int*으로 반환하는 것이 좋습니다.

또한 타입 정의와 함수 정의를 단순화 수 :

typedef int intarray_t[4]; 

intarray_t* fn() { ... } 
+0

흠, 이것은 어떤 온라인 컴파일러에서도 작동하지 않습니다 – Will

+0

@Will : gcc v3.4.3과 v4.4.1뿐만 아니라 Sun cc v5.9에서도 작동합니다. 온라인 컴파일러. – sth

+0

typedef를 사용하여 구문 문제를 쉽게 해결할 수 있습니다. 하지만 실제로 int ** 또는 int *를 반환하는 것이 좋습니다. – Arkadiy

1

당신은 반환 할 수 int**

+0

또는 void *. 두 가지 모두 배열의 크기에 대한 많은 정보를 가지고 있습니다. –

2

Its not allowed to return arrays from functions, but there are workarounds합니다. 예를 들어

, 다음 코드

int fn()[4] { 
    ... 

다양한 온라인 컴파일러에 의해 허용되지 않습니다; 나는 컴파일러의 가장 표준 다음 중 하나가 될 것으로 간주됩니다 꼬모 온라인 컴파일러에 그것을 시도, 심지어 이완 모드로 말한다 :

error: function returning array is not allowed

또 다른 포스터는 int**를 반환 제안 ; 이 작업은 가능하지만 스택 할당이 아닌 힙 할당 메모리를 반환하는 경우 매우주의해야합니다.

관련 문제