C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[92] 참조자와 포인트를 통한 처리는 어떻게 다른가?
김태선 [jsdkts] 17046 읽음    2005-12-20 16:47
먼저 소스를 간단히 만들어 봅시다.

//---------------------------------------------------------------------------

void    add(int &a, int &b)
{
    a = a + b;
}

void    add2(int *a, int *b)
{
    *a = *a + *b;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int  a = 1;
    int  b = 2;
    add(a,b);
    add2(&a, &b);
    Caption = a;
}
//---------------------------------------------------------------------------

결과 값은 5가 찍힙니다.

add 는 참조자(레퍼런스 reference)를 통한 인자의 전달이고
add2는 포인트를 통한 인자의 전달입니다.
이 둘의 코드는 어떻게 틀릴까요?

이 코드를 컴파일하고 적당한 곳에 브레이크 포인트를 걸어 CPU 화면을 봅시다.

add 함수와 add2 함수의 어셈블리 코드가 완벽하게 일치함을 알수 있습니다.
또한 add(a,b); add2(&a, &b); 로 호출하는 부분의 어셈블리 코드도 완벽하게 일치함을 알수 있습니다.

그런데 참조자를 쓰면 코딩이 좀 더 편하고 알아보기도 쉽죠.
이것이 참조자를 쓰는 주된 이유입니다.

C++의 문법적인 문제로 참조자를 쓰지 않을 수 없는 경우도 있습니다.
연산자 오버로딩 같은 경우 등인데 이는 좀 세부적인 이해가 필요합니다.
그런 경우가 있다는 것을 기억하시고 궁금하신 분은 따로 공부해 보세요.

위처럼 참조자와 포인트를 통한 변수의 전달은 같은 것에 대한 다른 표현에 불과하므로
컴파일러는 참조자를 포인트로 인식해서 컴파일하게 됩니다.

어느 것을 쓸 것인지는 스스로 적정하게 판단해서 사용하시기를...
쩡이 [xtremegroove]   2006-10-03 09:34 X
같은 것이었군요..ㅇㅇ~

+ -

관련 글 리스트
92 참조자와 포인트를 통한 처리는 어떻게 다른가? 김태선 17046 2005/12/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.