초보적인 질문에도 친절히 답변해주셔서 감사합니다. 직접 작성해보면서 하니까 이해가 잘 됬어요 ㅠㅠ 감사드립니다 ㅎ
송신영 님이 쓰신 글 :
: 함수는 배열을 리턴할 수 없습니다.
: 아래와 같은 코드는 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;
: : : : }
: : : : 이런식으로 배열을 전부 리턴해서 값을 가져오려하는데 첫번째 값밖에 가져오질 못하네요..
: : : : 어떻게 해야하는지 알려주시면 감사하겟습니다 ..;;