창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


LIST ALL
Posted by ps.이진백2004-12-31 15:43:35, Hit : 6308
[ps.구루 강좌 #12♭]포인터를 왜 씁니까?
Homepage : http://gpro.ev7.net/
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=open_lec&no=58




 작성자   : 조무영 [moonyeom] 조회: 17, 줄수: 14, 분류: Etc.




[답변] 포인터를 왜 씁니까?




말씀대로, 데이타가 있는 곳의 주소가 필요할때 쓰는거죠...
몇몇 용도로만 쓰는게 아니라, 필요한 용도가 워낙 많으니
"포인터는 이럴때에 쓰는거다"라고 딱 꼬집어 말씀드리기엔 너무 방대하겠네요.
암튼 포인터 없이도 지금까지 프로그래밍에 불편이 없으셨다면
"포인터는 이런 점이 좋다"는 설명을 한들 피부에 와닿지 않겠지요.
역시 그냥 책으로 공부해서 아는것과 "필요에 의해서" 익히는 것과는 다른가봐요...

ps.구루 wrote:
> 이전부터 여럿 포인터를 이용한 강좌와 소스를 봐왔습니다.
> 하지만, 왜 기본 형식에 포인터를 더하여 쓰는 경우가 있는지 궁금합니다.
> 그러니까, 포인터를 어떤 용도로 쓰는지...
> 포인터가 좋은 점은 무엇인지...
> 제가 아는 포인터에 대한 개념은 그저 메모리 주소를 가리킨다. 그것 뿐입니다.
> 2가지를 알고 싶습니다.
http://www.delmadang.com/

확실하게 알아보고자 델마당에 제가 질문했습니다.
역시 이게 제일 확실한 답인듯 싶네요.

다른 포인터 자료도 찾아보았습니다.






  작성자   : 델파이사랑 수정: 1, 조회: 7, 줄수: 22, 분류: Etc.




[답변] 흔히들 포인터는 양날의 칼이라고 표현합니다.




조무영님 말씀대로 쓰임새가 너무 많아서 어느 경우에 사용하는지
모두 기술하기는 어렵구요. 대개의 경우 메모리를 직접 access 할 때
사용합니다. 그럼 왜 직접 메모리를 access하느냐 속도때문이죠.
그럼 포인터를 사용 안하면 속도가 느리냐.. 그것은 아니구요.
포인터로 처리하는 것이 좀더 편하기 때문이죠.

화상처리나 게임같은 분야에서는 포인터가 기본이지만 일반 응용프그램에서는
포인터를 전혀 사용하지 않고도 프로그래밍이 가능합니다.
하지만 Windows API를 사용할 때는 어쩔 수 없이 포인터를 사용해야합니다.
Windows API가 call by value만 지원하는 C언어, 어셈블러로 개발되었기 때문이죠.
전달 인자값을 변경하고자 할 경우에는 포인터를 넘겨서 call by reference를
흉내냅니다. Pascal은 원래 call by reference를 지원하기 때문에 굳이 포인터를
사용하지 않아도 됩니다. 물론 전달인자 하나 때문에 포인터를 사용하는 것은 아니구요.
예를 들자면 그렇다는 겁니다.
반면 메모리를 직접 access하기 때문에 갖는 단점도 있습니다. 엉뚱한 메모리를 access해서 메모리 침범이 발생하는 경우죠. 더 심각한 것은 그런 논리적인 버그를 찾기가 쉽지 않다는 것입니다.

그래서 흔히들 포인터는 양날의 칼이라고 표현합니다.

일부 고급 언어에서는 포인터 자체를 지원하지 않는 경우도 있죠. Java처럼..
C#같은 경우에도 포인터를 지원하기는 하지만 아주 특수한 경우(위에 예기한것처럼 API를 호출할 경우)에만 사용하도록하죠.






이전: [질문]포인터를 왜 씁니까?
다음:
[답변] 포인터를 왜 씁니까?
2004/12/31(19:10)
델마당








  작성자   : 오범석 조회: 1473, 줄수: 63, 분류: 기타




포인터는 목욕탕에서도 볼수 있다?





예전에 친구에게 C 언어의 포인터를 이해시키기 위해서 목욕탕 옷장을 예를 든적이 있습니다.

그때 했던 얘기가 뭐였냐하면...

목욕탕과 포인터를 비교해 보겠습니다.

1. 목욕탕에는 번호표가 붙은 여러개의 옷장이 있고 여기에는 옷이나 기타 물건이 보관되어 있습니다.
   ->
   각각의 메모리 번지(목욕탕에 붙은 번호표에 해당하는 옷장)에는 데이터(옷이나 기타물건)가 저장되어있습니다.

2. 옷장에는 해당 옷장을 열수있는 열수있는 열쇠가 있습니다. 이 열쇠에도 번호표가 붙어있죠.
   여기서 열쇠는 포인터 변수에 해당하고 열쇠에 붙어있는 번호표는 실제 포인터 변수에 들어있는 값에 해당합니다.
   메모리의 특정번지(특정 옷장)에 접근하기 위해서는 접근할 메모리 주소를 알고있어야하는데 포인터 변수에는
   해당 메모리의 주소가 들어있습니다.
   옷장 열쇠에도 보면 번호표가 붙어있는데 이게 실제 포인터 변수에 들어있는 값이라고 생각하면 됩니다.

3. 델파이에서 포인터변수에 들어있는 번지의 데이터를 가지고 오기 위해서 다음과 같은 방법을 사용합니다.
  
   var
     P: PChar; (* ^Char --> 이건 열쇠를 만드는 겂니다. 하지만 아직 번호표가 붙어있지 않죠 *)
     P2: Byte absolute 11000; (* 이건 열쇠를 만들고 바로 11000 이라는 번호표를 붙어주라는 얘기입니다. *)
     P3: PChar;
     C: Char;
   begin

     P := PChar(10000);  
    { 요건 실제 열쇠에다가 번호표를 붙여주는 겁니다. 이미 옷장이 있을때 입니다.
      이건 곧..포인터 변수 P가 이미 할당된 특정 메모리를 접근하기 위해서 포인터 변수에 주소를 지정하는 겁니다.
    }

     P3 := AllocMem(20000);
    { 요건 새로 20000 크기의 옷장을 하나 만들고 해당 옷장의 번호를 열쇠의 번호표에 기록하라는 겁니다.
      즉 20000 사이즈의 메모리를 할당하고 할당된 메모리 주소를 포인터 변수 P3 에 대입하라는 얘기입니다. }

     C := P^;  
    { 요기서 P^ 라고 포인터 변수뒤에 ^ 를 붙이는 것은 해당열쇠에 붙어있는 번호표(포인터변수에 들어있는 값)에
      해당 하는 옷장(메모리 번지)에 들어있는 물건(데이터)를 꺼내오라는 얘기겠지요? }

     P^ := 'A';       
    { 요건 포인터 변수에 들어있는 메모리번지에 'A' 라는 값을 집어넣으라는 얘기인데..
      열쇠에 붙은 번호표에 해당하는 옷장안에 내용물을 집어넣으로난 얘기겠죠? }

    FreeMem( P3 );
    { 요건 포인터 변수에 들어있는 주소의 메모리 공간을 해제하라는 얘기입니다.
      옷장 치워버리라는(폐기처분) 얘기죠 }
    
    C := P3^;
    { 요건 에러입니다. 위에서 옷장을 페기처분 했기때문에 해당 열쇠에 붙어 있는 번호표에 해당하는 옷장이
      없잖아요? 당연히 안될얘기죠... }

    P3 := nil;
    { 요건 포인터 변수가 더이상 특정 메모리를 가르키지 않도록 하라는 겂니다.
      즉 열쇠의 꼬리표를 떼어내버리라는 얘기죠.. 왜 이렇게 하냐하면 잘못된 열쇠 사용을 미연에 방지하기 위해서죠
      열쇠에 번호표가 없으니 위의 경우와 같이 실수할 일이 없잖아요?       
    }
      
   end;

  이중포인터같은 것도 있는데 이건 열쇠를 보관하는 열쇠보관함의 열쇠 정도로 생각하시면 되겠네요.

  쩝~ 예를든다는게 더 혼란스럽게 해드렸는지도 모르겠네요.
  
  그럼 이만....





이전: [팁] 포인터를 이해하기 위해선..
다음:
[팁] 델파이 6에서 폼의 TransparentColor 프로퍼티를 아십니까?
2001/09/08(00:38) from 61.77.217.81
델마당


글쎄요...
포인터를 쓰는게 이 뿐입니까.

API에서도 문자를 넘길때 PChar를 요구하는데, 이것이 곧 문자 포인터입니다.
다행히 창조는 자동으로 형 변환(타입캐스팅)을 하는듯 합니다.

그리고 듣기로는 구조체 역시 포인터를 이용한다면서요?

그런데...
포인터를 알아야만 프로그래밍을 할 수 있는것 역시 아니라는거죠.

단지 말씀드리고자 하는것은,

알아두면 좋다.


입니다.

지상현   2005-01-01 PM 1:22:27  
포인터 정말 편합니다. -_-;

제 경험인데요... 아시다시피 VB는 포인터란 개념을 직접적으로 지원하고 있지 않습니다.
그러다가 제가 어쩌다가 C를 접했는데... 포인터...요놈이 자꾸 길을 막아서 힘들었는데... 또 어쩌다가 이해를 했죠 -_-;

여하튼... VB를 쓰다보면 항상 느끼는 것이... "아! 이럴 때 포인터가 있다면 이런 허접하고 쓰레기스러운 루틴은 필요 없는건데!" 라는 생각이 자주 든다는 겁니다.

확실히 포인터는 편해요. (포인터 없는 VB로도 프로그램 잘 만드는 것처럼 몰라도 프로그램 만드는데는 지장이 없습니다. 좀 노가다를 해야겠지만)

흐흐...포인터, 알면 정말 편리하니 기회가 되시면 반드시 알아두시는게 좋습니다.
손상진   2005-06-23 AM 1:06:18  
아.. 이제야 포인터에 대해 이해가 가기 시작한다~^^
LIST ALL               GO TO THE TOP


N
   Subject
Posted by
Date
H
69
   리소스 해커를 이용하여 DLL 파일안의 HTML 문서 넣기! [4]
qkrwhdgns 2005/07/20  5663
68
   [끼적강좌 8]RPG게임을 만들어보자 [1강] [3]
권선중 2005/07/16  6066
67
     [re] [끼적강좌 8]RPG게임을 만들어보자 [2강] [1]
권선중 2005/07/17  5694
66
   [끼적강좌7] 달력 구현강좌 [1강][초급]
권선중 2005/07/11  5147
65
     [끼적강좌7] 달력 구현강좌 [2강][고급]
권선중 2005/07/15  4851
64
       [끼적강좌7] 달력 구현강좌 [3강][응용]
권선중 2005/07/16  4633
63
   [끼적강좌 6] 선중이 계발한 암호화구현 [7]
권선중 2005/06/29  4860
62
   [끼적 강좌] 기본문법을 알아야 한다...! [10]
권선중 2005/06/27  4922
61
   [끼적강좌 5] 로그인 구현강좌 [1강][초급] [6]
권선중 2005/06/24  5447
60
     [끼적강좌 5] 로그인 구현강좌 [2강][중급] [2]
권선중 2005/06/25  5568
59
       [끼적강좌 5] 로그인 구현강좌 [3강][고급] [3]
권선중 2005/06/26  5352
58
         [re] [끼적강좌 5] 로그인 구현강좌 [4강][다계정 구현] [5]
권선중 2005/06/27  5004
57
   마우스 오른쪽 눌렀을때의 메뉴 뜨게하기(초보용)
이시영 2005/02/02  5144
56
   [쉬운강좌1]환경파일 다루기 [3]
정성우 2005/01/11  5461
55
   영문 윈도우에서의 창조로 만든 프로그램.. [16]
손상진 2005/01/02  5942

   [ps.구루 강좌 #12♭]포인터를 왜 씁니까? [2]
ps.이진백 2004/12/31  6308
53
     [re] [ps.구루 강좌 #12♭]포인터를 왜 씁니까? [1]
지상현 2005/01/01  5623
52
   창조의 한계를 뛰어 넘어서 #1: '문자' 포인터 써먹기 [4]
지상현 2004/11/23  6931
51
   [ps.구루 강좌#11] 서비스팩2에서 프로그램 추가/제거 설정
ps.이진백 2004/10/26  5465
50
   대박로또에 적용된 자동업데이트 알고리즘.. [7]
최재일 2004/09/13  7936
49
   [삐까뻔쩍강좌] 오랜만에 글쓰네.. [10]
박재성[날개달기] 2004/09/07  4983
48
   [보충강좌#10-1] *.Res를 위한 *.Rc [1]
ps.이진백 2004/08/12  6154
47
   [강좌#10] DLL에 HTML 쑤셔넣기 [6]
ps.이진백 2004/08/06  6211
46
   방금생각한 암호화 알고리즘 - -;; [2]
박재성[날개달기] 2004/07/29  5667
45
   [끼적강좌 4] 창조 구현 DB강좌 [1강] [5]
권선중 2004/07/25  5825
LIST ALL   Prev [1][2] 3 [4][5] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인