함수는 배열을 리턴할 수 없습니다.
아래와 같은 코드는 int 형 배열 4개짜리를 리턴하는 함수인데요.
int (fun(void))[4] // int형 배열4개 짜리 리턴
{
int a[4] = {1,2,3,4};
return a;
}
컴파일 하면 아래와같은 에러가 발생합니다.
[BCC32 Error] File1.cpp(28): E2091 Functions cannot return arrays or functions
아래와 같이 배열 포인터를 리턴하는 코드는 가능합니다.
int (*fun(void))[4] // int형 배열4개 짜리의 포인터를 리턴.
{
int a[2][4] = {1,2,3,4};
return a;
}
즉 포인터를 리턴해야한다는 건데요.
함수의 내부에서 선언한 지역 변수는 함수를 벗어나면 스텍에서 사라지게 됩니다.
그래서 해당 포인터를 받아서 사용할 경우 문제가 발생할 수 있습니다.
(물론 new 로 선언하면 되지만.. 함수 외부에서 메모리 관리를 해야하니.. )
그래서 함수 인자에 미리 메모리를 할당한 포인터를 넘겨주면
함수는 그 포인터에 데이터를 채워 주기만 하면 된다는 겁니다.
이런 복잡한 표현식(여기서는 그나마 아주 간단하게 표현한 것임)같은거 사용하지 않아도
기존에 알려 드린것 처럼 그냥 그렇게 쓰시면 됩니다.
* 간략한 테스트 코드입니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include <iostream>
#include <string>
#include <conio.h>
//---------------------------------------------------------------------------
using namespace std;
#pragma argsused
void fun(int * p, int size);
int _tmain(int argc, _TCHAR* argv[])
{
int a[10] = {0,};
for(int i=0; i<ARRAYSIZE(a); i++) cout << i << " = " << a[i] << endl;
fun(a, ARRAYSIZE(a));
for(int i=0; i<ARRAYSIZE(a); i++) cout << i << " = " << a[i] << endl;
getch();
return 0;
}
//---------------------------------------------------------------------------
void fun(int * p, int size)
{
if(p) {
for(int i=0; i<size; i++) {
p[i] = i;
}
}
}
//---------------------------------------------------------------------------
히리 님이 쓰신 글 :
: 음..이해가 안되네요..배열을 리턴하려고 하는데 배열 포인터를 매개변수로 써야하나요..;죄송합니다;
: 송신영 님이 쓰신 글 :
: : void __fastcall GetData(String pStr[11])
: :
: : 또는
: :
: : void __fastcall GetData(String * pStr, int nArraySize)
: :
: : 이런 식으로 값을 받아올 배열 포인터를 인자로 넘겨줘야합니다.
: :
: : 히리 님이 쓰신 글 :
: : : String __fastcall cmd::GetData()
: : : {
: : : String strReturn[11];
: : : //11번째 배열까지값을얻고...........................
: : :
: : : return *strReturn;
: : : }
: : : 이런식으로 배열을 전부 리턴해서 값을 가져오려하는데 첫번째 값밖에 가져오질 못하네요..
: : : 어떻게 해야하는지 알려주시면 감사하겟습니다 ..;;