|
파스칼에도 포인터가 있습니다.
다만 C언어에 비해서는 제약이 많습니다.
제가 알기론 파스칼은 최초로 구조적 프로그래밍 기법을 도입한 언어입니다.
C언어와는 비슷한 시기에 연구,개발이 되었고 서로간에 많은 영향을 미쳤습니다.
후에 파스칼을 만들 니콜라스 워쓰 교수가 계속 개량을 하여
modula-3로 발전했고, Oberon 프로젝트까지 진보하였습니다.
현재 Oberon 프로젝트는 어떻게 되었는지 모르겠군요..
상당히 관심이 있었는데..
(modula-3에 관심이 많아서.. 어떻게든 컴파일러를 한번 구해볼려고 했던적이
있었는데..결국 못 구했지요..ㅠㅠ)
좀 틀린내용이 있을지도 모르겠습니다.
^^ 님이 쓰신 글 :
:
: ^^
: 제가 몰 잘못 알고 있나요 ?
: Object Pascal에는 포인터형이 있는데, Pascal에는 없는 걸루 아는데....
: C언어가 나오고, C언어 자체의 자유분방함때문에 배우는데 어려움이 많아서 이를 보다 쉽게 만들고자 만든 언어가 pascal로 알고 있습니다. 그래서 C언어에서 가장 많이 틀리는 ;(세미콜론) 규칙을 보다 강화하고, 어려운 포인터 개념을 도입하지 않은 것으로 알고 있습니다.
:
:
:
: 김성진.kark 님이 쓰신 글 :
: : 에구, ^^ 님 답변중에 수정할 부분이 있어서 글을 올립니다.
: :
: : pascal에도 포인터형이 있습니다.
: :
: : (아래 예제는 Object Pascal Language Guide에서 가져왔습니다.)
: :
: : var
: : X,Y : Integer; // X and Y are Integer variables
: : P: ^Integer; // P points to an Integer
: : begin
: : X := 17; // assign a value to X
: : P := @X // assign the address of X to P
: : Y := P^ // dereference P; assign the result to Y
: : end;
: :
: :
: : ^^ 님이 쓰신 글 :
: : : pointer로 정의해 보세요.
: : : 참고로 C++ Builder 내에서는 클래스를 직접적으로 정의하여 사용하는 방식이 아니라 포인터를 이용한 접근방식을 사용하거든요. 그리고 pascal에서는 pointer형이 없습니다.
: : :
: : : TMessageItem *mi; <= 이렇게...
: : :
: : :
: : :
: : : 홍지곤 님이 쓰신 글 :
: : : :
: : : : 델파이에서 이렇게 선언 된 것을 빌더로 고치는 중인데 한가지 막히는
: : : : 부분이 있습니다.
: : : :
: : : : procedure TMainForm.MsgSimulator1StopRecord(Sender: TObject);
: : : : var
: : : : i : integer;
: : : : mi : TMessageItem; <------------- 막히는 부분
: : : : s : string;
: : : : begin
: : : : StopBut.Enabled := False;
: : : :
: : : : for i := 0 to MsgSimulator1.Messages.Count-1 do begin
: : : : mi := MsgSimulator1.Messages[i];
: : : :
: : : : s := Format('Msg: %3d X: %4d Y: %4d Key: %4.4x Delay: %4d', [integer(mi.Msg), mi.PosX, mi.PosY, mi.VkKey, mi.Delay]);
: : : : Memo1.Lines.Add(s);
: : : : end;
: : : : end;
: : : :
: : : : end.
: : : :
: : : : //---------------------------------------------------------------------------------
: : : : void __fastcall TForm1::MsgSimulator1StopRecord(TObject *Sender)
: : : : {
: : : :
: : : : int i;
: : : : TMessageItem mi; ----------->이렇게 했더니 되지 않습니다.
: : : : String s;
: : : :
: : : : StopBut->Enabled = False;
: : : :
: : : :
: : : : for (i=0; i=MsgSimulator1->Messages->Count-1; i++)
: : : : mi = MsgSimulator1->Messages[i];
: : : : s = Format("Msg: %3d X: %4d Y: %4d Key: %4.4x Delay: %4d", [int(mi->Msg), mi->PosX, mi->PosY, mi->VkKey, mi->Delay]);
: : : : Memo1->Lines->Add(s);
: : : : }
: : : :
: : : : //-----------------------------------------
: : : :
: : : : TMessageItem 이게 *.pas에서 *.hpp로 바뀐 것을 보니
: : : : TCollectionItem 클래스로 되어있는것 같습니다.
: : : : 어떻게 MsgSimulator1StopRecord 부분에서 선언해야
: : : : 하는지요? 답변 부탁드립니다.
: : : :
: : : : //-- user supplied -----------------------------------------------------------
: : : :
: : : : namespace Msgsimulator
: : : : {
: : : : //-- type declarations -------------------------------------------------------
: : : : #pragma option push -b-
: : : : enum TWMMessage { mmMouseDown, mmMouseUp, mmMouseMove, mmKeyDown, mmKeyUp };
: : : : #pragma option pop
: : : :
: : : : class DELPHICLASS TMessageItem;
: : : : class PASCALIMPLEMENTATION TMessageItem : public Classes::TCollectionItem
: : : : {
: : : : typedef Classes::TCollectionItem inherited;
: : : :
: : : : protected:
: : : : #pragma pack(push, 1)
: : : : tagEVENTMSG em;
: : : : #pragma pack(pop)
: : : :
: : : : TWMMessage FMsg;
: : : : unsigned FDelay;
: : : : int FX;
: : : : int FY;
: : : : int FKey;
: : : : int FHWND;
: : : : Controls::TMouseButton FButton;
: : : : void __fastcall Fill_EM_From_Props(void);
: : : : void __fastcall Fill_Props_From_EM(void);
: : : :
: : : : public:
: : : : __fastcall virtual TMessageItem(Classes::TCollection* Collection);
: : : : __property int HWND = {read=FHWND, write=FHWND, nodefault};
: : : :
: : : : __published:
: : : : __property TWMMessage Msg = {read=FMsg, write=FMsg, nodefault};
: : : : __property int PosX = {read=FX, write=FX, nodefault};
: : : : __property int PosY = {read=FY, write=FY, nodefault};
: : : : __property int VkKey = {read=FKey, write=FKey, nodefault};
: : : : __property unsigned Delay = {read=FDelay, write=FDelay, nodefault};
: : : : __property Controls::TMouseButton Button = {read=FButton, write=FButton, nodefault};
: : : : public:
: : : : #pragma option push -w-inl
: : : : /* TCollectionItem.Destroy */ inline __fastcall virtual ~TMessageItem(void) { }
: : : : #pragma option pop
: : : :
: : : : };
: : : :
: : : : 이 밑에 부분은 생략
: : : :
: : : :
: : : :
: : : : //---------------------------------------------
: : : :
: : : :
: : : : 그럼..감사합니다..
|