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

C/C++ Q/A
[1721] Re:함수전달에 대한 질문
남병철.레조 [lezo] 1288 읽음    2002-12-12 21:33

매일 하나씩 답변을 달려구 노력하는 레조입니다;;
몇일전에 본 글인데 이제 답글을 쓰네요 ^^;;


: void change_it(int a[])
: {
:     int i=777, *q=&i;
:     a=q;
: }

일단 위의 change_it 함수로 포인터를 넘겨서 새로운 주소를(어떤의도에서든..--;)
받아오고 테스트를 하고싶은것 같은데...
change_it에 한가지 문제가 있네요.
인자로 들어오는 포인터 변수는 문제가 없겠지만 그 변수에 바꾸려는 주소를 대입할때
change_it 내부의 변수 어드레스를 사용했습니다.
이는 change_it 함수가 끝났을때 그 주소는 유효하지 않기때문에 주소를 바꾸었다고
볼수 없겠지요...(기록은 남아 있을듯 하지만...)

포인터 변수를 인자로 넘긴후에 내부에서 새로운 값으로 할당할때는 new를 사용해보세요.
수정해 보자면...
void change_it( int* a )
{
    a = new int;
    *a = 777;
}
이렇게 해놓으면 main에서 별문제 없이 사용할수 있겠지요.. 그리고 delete 하시는것 잊지
마시고.. ^^

그럼 change_it 말고 다른걸 살펴볼까요?
(가장 흔한 스왑(상호바꾸기) 함수입니다.)
[참고]
   참조란? 같은변수의 또 다른 이름이다.
   참조가 포인터보다 좋은점은 해제할 필요가 없기 때문에 표기법이 더 단순하고
   컴파일러가 참조의 초기화를 강요하므로 골치아픈 포인터 실수를 범할 우려가
   적다.
   한편, 참조는 포인터보다 더 사용하기 쉽고 더 안전하지만 더 강력하지는 않다.



#include <stdio.h>
#include <conio.h>

void swap( int&, int& );   // 선언

int main()
{

    int a, b;
    a = 5;
    b = 10;

    printf( "\na = %d  b = %d", a, b );

    swap(a, b);  // 사용

    printf( "\na = %d  b = %d", a, b );

    getch();

    return 0;
}

void swap( int& a, int& b )   // 정의
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}



메인의 변수를 함수 내부에서 값을 바꾼다.
이는 메인에서도 바꾼 내용이 적용된다.





오제호 님이 쓰신 글 :
: 아래 프로그램은 change_it함수에서 a의 어드레스를 바꿔서
: main으로 전달하려 하는데
: 어떻게 전달해야 하는지좀 알려주세요.
:
: 가장 기본적인건데 잘 모르겠어요
:
: #include <stdio.h>
:
: void change_it(int a[]);
:
: int main()
: {
:    int a[5]={0,1,2,3,4}, *p;
:
:    p=a;
:    printf("p[1]=%d p=%p\n",p[1],p);
:
:    change_it(a);
:    p=a;
:   
:    printf("*p=%d p=%p\n",*p,p);
:    return 0;
: }
:
: void change_it(int a[])
: {
:     int i=777, *q=&i;
:     a=q;
: }

+ -

관련 글 리스트
1697 함수전달에 대한 질문 오제호 1197 2002/12/10
1721     Re:함수전달에 대한 질문 남병철.레조 1288 2002/12/12
1728         Re:Re:함수전달에 대한 질문 오제호 1143 2002/12/14
1729             상관없습니다. 김백일 1226 2002/12/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.