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

C/C++ Q/A
[1728] Re:Re:함수전달에 대한 질문
오제호 [] 1142 읽음    2002-12-14 12:12
답변 감사합니다.
근데 문제는 C언어에는 new 연산자가 없지 않나요?
C++로 프로그래밍을 하는 게 아니거든요..


남병철.레조 님이 쓰신 글 :
:
: 매일 하나씩 답변을 달려구 노력하는 레조입니다;;
: 몇일전에 본 글인데 이제 답글을 쓰네요 ^^;;
:
:
: : 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:함수전달에 대한 질문 오제호 1142 2002/12/14
1729             상관없습니다. 김백일 1226 2002/12/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.