Q&A

  • 파스칼 포인터에 대해서.....
음 델을 시작한지 삼사일 정도된 초보입니다.

c로 프로그래밍을 해봐서 그 소스를 가지고 놀고 있는데요. 제가 저수준 연산을 많이 해야 하걸랑요. 비트 연산자는 문제가 없는데 포인터가 문제가 있더군요. 다르더라고요.

흑흑 뭔놈의 언어들이 이렇게 많고 다른지. 누가 자바에서 델까지 그리고 저수준언어까지 되는 툴 안만드나? 거 만들면 전세계프로그래머들 다 한강에 모아놓고 이거만 쓰겠다는 서약 받고 안 그러면 손가락하나 헌납하고....얼쑤 좋다!!!!....

^&^ 농담이 길어졌군요 그럼 본론으로 들어가겠습니다.



c에서



int *i;

short *s;



s = (short *)(i + 1);



해주면 i 변수의 처음 2바이트는 무시하고 거기서부터 short의 값으로 읽어와서 이 놈을 파스칼로 하려고했는디.



i : ^Integer;

s : ^Smallint;



s^ := short((i + 4)^);



하문 안되더군요. 음 아마 *(i + 4) 이런 연산을 파스칼에서는 지원하지 않나요?



이거 뭐 깔끔한 수가 없을까요?



그리고 이거는 어떻게 파스칼로 고쳐야하지요?



char *data;

int buffer[3];



buffer[0] = (BYTE)(*(WORD *)(data + 1));



파스칼의, 델의 고수를 기다리며 글을 올립니다.



1  COMMENTS
  • Profile
    최용일 2000.08.27 00:38
    안녕하세요. 델파이세상(http://www.freechal.com/delphiworld)의 최용일입니다.



    도스용 C프로그래밍(Turbo C, ...)소스로 공부하신다면 약간 위험할 수 있습니다.



    윈도우 환경에서는 메모리 영역을 함부로 건드리지 못하니까요. 이렇게 포인터를



    남발하는것은 좋은 프로그래밍 습관이 아닙니다. 자신만이 쓰는 것이라면 별 상관이



    없겠지만 다른 사람이 봤을때 그 내용을 이해하기가 힘들게 됩니다. 또 시일이 한참



    지난후에 소스를 변경해야 할때는 자신조차도 이 소스가 뭔지 이해할 수 없는 경우도



    생깁니다. 암튼 아래와 같이 코딩하세요.



    > int *i;

    > short *s;

    >

    > s = (short *)(i + 1);



    var

    i: ^Integer;

    s: ^Smallint;

    begin

    // ......

    S := SmallInt(Pointer(Integer(I)+1));

    end;



    > char *data;

    > int buffer[3];

    >

    > buffer[0] = (BYTE)(*(WORD *)(data + 1));



    var

    data: ^Char;

    buffer: array[0..2] of integer;

    begin

    // ......

    buffer[0] := Byte(PWord(Pointer(Integer(Data) + 1))^);

    end;



    ^^ 항상 즐코하세요.



    진성열 wrote:

    > 음 델을 시작한지 삼사일 정도된 초보입니다.

    > c로 프로그래밍을 해봐서 그 소스를 가지고 놀고 있는데요. 제가 저수준 연산을 많이 해야 하걸랑요. 비트 연산자는 문제가 없는데 포인터가 문제가 있더군요. 다르더라고요.

    > 흑흑 뭔놈의 언어들이 이렇게 많고 다른지. 누가 자바에서 델까지 그리고 저수준언어까지 되는 툴 안만드나? 거 만들면 전세계프로그래머들 다 한강에 모아놓고 이거만 쓰겠다는 서약 받고 안 그러면 손가락하나 헌납하고....얼쑤 좋다!!!!....

    > ^&^ 농담이 길어졌군요 그럼 본론으로 들어가겠습니다.

    >

    > c에서

    >

    > int *i;

    > short *s;

    >

    > s = (short *)(i + 1);

    >

    > 해주면 i 변수의 처음 2바이트는 무시하고 거기서부터 short의 값으로 읽어와서 이 놈을 파스칼로 하려고했는디.

    >

    > i : ^Integer;

    > s : ^Smallint;

    >

    > s^ := short((i + 4)^);

    >

    > 하문 안되더군요. 음 아마 *(i + 4) 이런 연산을 파스칼에서는 지원하지 않나요?

    >

    > 이거 뭐 깔끔한 수가 없을까요?

    >

    > 그리고 이거는 어떻게 파스칼로 고쳐야하지요?

    >

    > char *data;

    > int buffer[3];

    >

    > buffer[0] = (BYTE)(*(WORD *)(data + 1));

    >

    > 파스칼의, 델의 고수를 기다리며 글을 올립니다.

    >