그것은 아마도 대답은 당신이 아니다 다시 찾으십시오. 그러나 무엇을 필요가 반환 형식이 (*)[2][3]
인 새식이이 은 상당히 간단합니다. 반환 유형은 new int [n][2][3]
입니다. 이것을 수행하면 a
은 [3] int 배열의 [2] 배열의 첫 번째 요소 인 을 가리 킵니다. 합계로 세 개의 차원 배열입니다.
new
은 최상위 수준의 포인터 레벨 배열 유형에 대한 포인터를 반환하지 않습니다. 배열 의 첫 번째 요소에 대한 포인터를 반환합니다. 그래서 당신은 new int[2][3]
을 할 경우, 표현 는 3 INT의 두 배열의 배열을 할당하지만 C++에, 배열 C의 이유 (깨진 있기 때문에, 3 INT (int (*a)[3]
)의 배열에 대한 포인터를 반환 적합성). 그리고 다른 방법을 강요하지 않는 방법은 입니다. 따라서 에 2 차원 배열에 대한 포인터를 반환하려면 에 3 차원 배열을 할당해야합니다. (첫 번째 차원은 일 수 있으므로 new [1][2][3]
은 속임수를 사용하며 실제로는 에만 [2][3]
을 할당하십시오.그런 다음 new Array
을 사용할 수 있습니다
struct Array
{
int data[2][3];
};
, 예상대로 모든 것이 작동합니다)
더 나은 솔루션은 struct
의 배열을 래핑 할 수 있습니다. 배열에 액세스하는 데 필요한 구문은 이 아닙니다.
배열을 조작하고 구문을 유지하는 데 필요한'[] '연산자와 유사한 연산자를 오버로드 할 수 있습니다. 이것이 OP가 달성하기를 원하는 것이지만 적어도 싱글 메모리 할당에 대한 문제를 해결하는지는 확실하지 않습니다. +1 나를 –
@ 제임스 Kanze : 이것은 많이 도움이됩니다. 감사. 대답으로 선택 : – NeonGlow
@IvayloStrandjev 좋은 지적. 배열을 포인터로 자동 변환하기 위해 변환 연산자를 오버로드 할 수도 있습니다. (즉, 표준 배열이 손상되는 방식을 에뮬레이션합니다.) –