Q&A

  • 프로시저에 포인터를 넘기는거 같은데.. 어떻게?
포인터 변수를 참조에 의해 넘길려고 하는데 어떻게 해야 하나요?



씨에서는 이렇게 되어 있더라구요..

void Encodeabc(a, len, b, digits)

int *b;

unsigned char *a;

unsigned int digits, len;

{

.............

};

문장안에서 a변수에 len크기만큼 임의의 값을 집어넣고 다시 a로 반환하는 구문입니다.



파스칼에서는 어떻게 해야 할까요?

3  COMMENTS
  • Profile
    aaa 2000.02.21 19:00
    씨에서 void형 함수는 procedure와 대응할 수 있고

    질문하신 용법을 Call by reference라고 합니다.

    이것은 인수 선언시 var를 선언해 주면 됩니다.

    그러면 프로시져 안에서 변수 a는 호출한쪽과

    호출받은 쪽의 주소가 동일 주소가 됩니다.



    procedure Encodeabc(var a : string; len, b, digits: integer)

    ~~~





    성병규 wrote:

    > 포인터 변수를 참조에 의해 넘길려고 하는데 어떻게 해야 하나요?

    >

    > 씨에서는 이렇게 되어 있더라구요..

    > void Encodeabc(a, len, b, digits)

    > int *b;

    > unsigned char *a;

    > unsigned int digits, len;

    > {

    > .............

    > };

    > 문장안에서 a변수에 len크기만큼 임의의 값을 집어넣고 다시 a로 반환하는 구문입니다.

    >

    > 파스칼에서는 어떻게 해야 할까요?

  • Profile
    성병규 2000.02.21 19:30
    var로 선언한 것은 알겠습니다만은 전달되는 파라메터가 포인터 변수입니다.

    sub 프로시저 안에서 그 크기가 결정되어 그 변수에 값을 넣게 되고 다시 sub프로시저 안에서 크기가 변한 변수를 상위 프로시저에 넘길 수 있습니까?

    aaa wrote:

    > 씨에서 void형 함수는 procedure와 대응할 수 있고

    > 질문하신 용법을 Call by reference라고 합니다.

    > 이것은 인수 선언시 var를 선언해 주면 됩니다.

    > 그러면 프로시져 안에서 변수 a는 호출한쪽과

    > 호출받은 쪽의 주소가 동일 주소가 됩니다.

    >

    > procedure Encodeabc(var a : string; len, b, digits: integer)

    > ~~~

    >

    >

    > 성병규 wrote:

    > > 포인터 변수를 참조에 의해 넘길려고 하는데 어떻게 해야 하나요?

    > >

    > > 씨에서는 이렇게 되어 있더라구요..

    > > void Encodeabc(a, len, b, digits)

    > > int *b;

    > > unsigned char *a;

    > > unsigned int digits, len;

    > > {

    > > .............

    > > };

    > > 문장안에서 a변수에 len크기만큼 임의의 값을 집어넣고 다시 a로 반환하는 구문입니다.

    > >

    > > 파스칼에서는 어떻게 해야 할까요?

  • Profile
    최용일 2000.02.21 20:04
    역시 var 파라메터로 참조를 하면 됩니다..

    값을 참좔땐 역참조 연산자 ^를 사용하시면 됩니다.



    ex) function (var p: pointer): integer;

    begin

    result := integer(p^);

    end;