2013-06-19 6 views
5

Red/System에서 배열의 첫 번째 요소에 대한 포인터를 만드는 방법은 무엇입니까?Red/System에서 'array'에 대한 포인터

my-integer: 1 
ptr: declare pointer! [integer!] 
ptr: :my-integer 

배열 선언 : 포인터에 주소를 할당

문제가되지 않습니다.

buffer: as int-ptr! allocate 1009 * size? integer! 

그러나. 그러나.

ptr: :buffer 

도 아닙니다.

ptr: ::buffer 
ptr: :buffer/1 
ptr: :(buffer/1) 

누구든지이 작업을 수행하는 방법을 알고 있습니까?

감사합니다,

모두 ptr에 따라 아놀드

+0

':'는 * "연산자"*가 아닙니다. 그것은 운영자가 아닙니다. 따라서 콜론을 결합하여 get-of-a-get (':: buffer') 또는 공백 (': buffer')을 넣을 수는 없습니다. 이것은 Rebol과 Red가 다른 언어와 아주 다른 이유와 관련이 있습니다. 선두의 ':'는 꾸미고있는 심볼이 GET-WORD!와 같은 "맛"을 나타내는 신호입니다. 이러한 "맛"(Lisp보다 더 많은 것)의 가용성에도 불구하고 여전히 상징적으로 처리되는 것입니다. Rebol/Red는 "정상적인"언어처럼 차려 입은 방식으로 처리하지만 자신의 방언으로는 달리 할 수 ​​있습니다! – HostileFork

답변

5

및 버퍼는 단순히 다른 하나를 할당, 데이터를 정수에 대한 포인터 :

:variable 구문은 단지를 얻기 위해 필요
ptr: buffer 

자바에서 "원시적"유형이라고 불리는 것의 주소. 이것은 byte!, integer!, float !, float32와 같습니다! 그리고 논리! Red/System의 현재 버전. :이 없으면 컴파일러는 변수에 저장된 값을 제공합니다.

c-string과 같은 다른 모든 유형! 구조체! (따라서 별칭!)은 실제로 포인터입니다. 따라서 컴파일러는 참조 될 때 메모리 주소 인 값을 제공합니다.

print i    ;; will print the value stored in i 

당신이 일련의 단어 (이름에 추가 된 :의 변수)를 사용

컴파일러 : 당신이 단어를 참조하면

은 레드/시스템 컴파일러에 저장된 값을 제공합니다 이를 저장에 값 :

i: 1    ;; stores 1 in variable i 

당신이 GET 단어 (이름의 시작 부분에 삽입 된 :의 변수)를 사용, 컴파일러는 변수의 주소를 제공합니다.

int-ptr: :i   ;; stores the address of i in int-ptr