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

C/C++ Q/A
[1729] 상관없습니다.
김백일 [cedar] 1225 읽음    2002-12-14 12:42
오제호 님이 쓰신 글 :
: 답변 감사합니다.
: 근데 문제는 C언어에는 new 연산자가 없지 않나요?
: C++로 프로그래밍을 하는 게 아니거든요..

일부의 임베디드 환경과 같이 C++을 아예 사용불가능한 경우가 아니라면,
new나 참조(reference)와 같은 C++의 기능들을 쓰는 것이 훨씬 편리합니다.
C++이라고 해서 굳이 클래스와 객체지향을 반드시 해야하는 것은 아닙니다.
일단을 C식으로 프로그래밍하면서, 객체지향과 상관 없는 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             상관없습니다. 김백일 1225 2002/12/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.