PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/09/02 23:10:14
Name EZrock
Subject 객체의 포인터를 저장하는 배열을 지역변수로 사용할때 패러미터 패싱에 대해 질문
열혈강의 C++의 은행계좌 관리 프로그램을 제가 약간씩 고쳐가고 있습니다.

그 중에 전역변수로 쓰고 있는 것들이 눈에 거슬려서 무조건 지역변수화 시켜서 쓰고 있는데[물론 초반에 클래스 세분화 시키기 전에 쓰던 방법이죠]

그 중에 가장 골치 아픈게 객체저장을 위한 포인터 배열을 전역으로 빼놓은 것을 지역변수로 바꾸는 것입니다.

예를 들면

Account* pArray[100];

int index=0;

이런식으로 전역변수화 시켰는데

int main(void)

{

        Account* pArray[100];

        int index=0;

.

.

        case MAKE:

              index = MakeAccount(pArray, index);

              break;

.

.

.

}

int MakeAccount(Account* pArray[],int index)
{
.
.
}

이런식으로 패러미터로 넘겨받는 식으로 사용할려고 합니다만...

저 포인터배열을 패러미터로 주고 받는 과정이 너무나도 힘들 따름입니다.

저 방식도 사실 컴파일하면 에러가 발생하니 맞는것도 아닙니다.

어떻게 해결해야 할까요?

저걸 단순히 포인터 없이 객체를 저장하는 배열로 바꾸면 얼마든지 편하게 갈수 있지만 객체 혹은 구조체의 포인터를 저장하는 배열을 제대로 다뤄보고 싶어서 이렇게 글을 남깁니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
08/09/02 23:24
수정 아이콘
int MakeAccount(Account** pArray,int index)


해보셨나요?
08/09/02 23:33
수정 아이콘
일단 해결은 했습니다. 그런데 메인함수에서 하부함수로 패러미터 전달을 할때 단순히 배열이름만으로 전달해줘도 괜찮은 이유가 기억이 안나는군요.

예전에 분명히 배웠는데...-_-)a;;; 그 부분만 설명해주실분?
08/09/02 23:53
수정 아이콘
그냥 (배열 = 포인터) 라고 생각하시고 플밍하셔도 크게 문제는 없습니다. 뭐, 엄연한 차이가 있긴 하지만...
예를 들어서, char * 변수(보통 스트링이죠...)를 전달하는 함수를 호출할때, 배열로 선언한 변수를 그냥 전달하는 경우가 많듯이요..

즉...
char szString[32];
strcpy( szString, "AAA" );
뭐 이런식으로 자주 쓰잖아요? 근데, strcpy의 첫번째 전달인자는 char * 값이란 말이죠.
08/09/03 00:32
수정 아이콘
흐음...개념으로 딱 막히면 당연한건데도 스스로 이해를 못해서 막 헤메는데 지금은 해결됐습니다. 감사합니다.
08/09/03 08:34
수정 아이콘
C 언어에서

배열의 이름은 주소값을 나타냅니다.

char test[100];
이 선언되어 있을 때, &(test[100]) = test 인거죠.(주소값이 똑같다는 말).

그래서 메인에서 함수를 호출할때, 배열같은 경우 배열명(주소값)을 하부 함수로 알려주는거죠.
그러면 하부함수는 받는 인자값의 주소를 알기 때문에 접근할 수 있는거구요..

단지 주소값만 넘겨주면 힘들지만, 배열명(주소값, test) 앞에 그 알려준 주소값의 변수형(char)를 알려주기 때문에
배열의 이름(배열이 시작하는 주소값)만 가지고도 접근할 수 있는것입니다.

EZrock님

일단 call by value, call by reference 의 개념을 명확히 해보시구요 (보통 간단한 swap 함수로 많이 공부하죠^^)
시중에 포인터 책 관련 하나 구입하셔서 보세요.. 그거 한권 보시면 포인터, 주소값 등은 쉽게 깨닫게 됩니다.


ps.본문에서는 Account * array[100];
이 의미를 잘 아셔야 되는데 연산자 우선순위에 의해서 *처리가 먼저 되기 때문에
Account 객체를 가르키는 포인터 변수를 100개 담을 수 있는 배열 구조입니다.

그 주소값은 배열의 이름인 array 로 해도 상관없지만, 문제는 배열의 이름(주소값)만 가지고는
이게 2차원 배열인지, 어떤건지 모른다는거죠..
그래서 그걸 넘겨줄때는 정확히 명시해줘야 합니다~

아마도; 오래되서 해봐야 알겠는데;;

case MAKE:
index = MakeAccount(*pArray, index);
break;
}

int MakeAccount(Account** pArray,int index)

..
Account aaa= new Account();
Accout *p = aaa;
*(pArray + index) = p;


정도일듯 싶기도 하네요...

ㅠㅠ 한동안 자바만 했더니 다 잊어버렸네요...ㅠㅠ
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
41611 요즘 스타왜 안하나요 [2] 축구사랑1932 08/09/02 1932
41610 객체의 포인터를 저장하는 배열을 지역변수로 사용할때 패러미터 패싱에 대해 질문 [5] EZrock1556 08/09/02 1556
41609 편입에 대해서 궁금한게있습니다!! 이진우1591 08/09/02 1591
41608 윤하 앨범관련 질문입니다; [4] Jess:D1751 08/09/02 1751
41607 정당 대표와 원내대표의 차이가 뭐지요? [6] Doraeomn2109 08/09/02 2109
41604 심청이처럼 옛날이야기 중에 효를 대표하는 인물(남자)이 누가 있나요? [7] 방패연2023 08/09/02 2023
41603 코스피지수 그래프를 볼 수 있는곳 없을까요? [3] 그게언제였더2997 08/09/02 2997
41601 여자랑 친해지려면 어떻게 해야할까요? [9] A certain romance3572 08/09/02 3572
41600 블루스톰 경기좀 물어봅니다. [1] 퐈퐈퐈퐈야1532 08/09/02 1532
41598 대학 장학금에 대해 궁금한게 있습니다.. [8] funnyday1856 08/09/02 1856
41597 수시 관련 질문이요 [1] MeMoRieS1870 08/09/02 1870
41596 소개팅 관련 질문 [8] 라임밍기뉴3065 08/09/02 3065
41594 OSL , MSL 언제 다시 경기 시작하나요? [2] ilikerain1859 08/09/02 1859
41593 DVD 코드프리.. [2] Forgotten_2106 08/09/02 2106
41592 정치인은 어떻게 되는거죠? [6] 사레복1864 08/09/02 1864
41591 축구팀 아스날의 팬사이트나 사진 정보를 얻을 수 있는 곳을 알려주세요 [4] 김솔직1822 08/09/02 1822
41590 선물용 와인 잘아시는 분께 질문드립니다. [3] Chicken flies.1624 08/09/02 1624
41589 야구 질문입니다. [3] 올빼미1823 08/09/02 1823
41588 소개팅 할 대상과 처음 연락하려는데.... [6] 낭만한량2675 08/09/02 2675
41587 커맨드앤컨커 레드얼럿1에 대한 질문입니다. [4] Mr.Children1546 08/09/02 1546
41584 SD메모리카드 관련 문의드립니다. [5] a50311572 08/09/02 1572
41583 테란대 토스전 200싸움할때 이상적인 일꾼수는 어느정도 일까요? [7] 모카2386 08/09/02 2386
41582 혹시 금융공학 하시는 분 있습니까? [3] 쌈팍2108 08/09/02 2108
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로