2013-06-19 4 views
5

में पॉइंटर्स को 'सरणी' में पॉइंटर्स मैं रेड/सिस्टम में किसी सरणी में पहले तत्व को पॉइंटर कैसे बना सकता हूं?रेड/सिस्टम

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) 

कोई भी जानता है कि यह कैसे करें?

सादर,

अर्नोल्ड

+0

ध्यान दें कि ':' एक * प्राप्त नहीं है "ऑपरेटर" *। यह बिल्कुल एक ऑपरेटर नहीं है। इसलिए आप प्राप्त करने के लिए कॉलन को गठबंधन नहीं कर सकते (':: बफर') और न ही आप एक स्पेस (': बफर') डाल सकते हैं। यह संबंध है कि रीबोल और रेड अन्य भाषाओं के विपरीत क्यों हैं। एक अग्रणी ':' एक सिग्नल है जिसका अर्थ है कि जिस सजा को आप सजा रहे हैं वह "ग्लेड-वर्ड" के रूप में "स्वाद" है! इन "स्वादों" की उपलब्धता के बावजूद (लिस्प के मुकाबले कहीं ज्यादा) यह अभी भी कुछ ऐसा है जो प्रतीकात्मक रूप से संसाधित हो जाता है। Rebol/Red उन्हें एक तरह से संसाधित करता है जो "सामान्य" भाषा की तरह तैयार होता है, लेकिन आपकी खुद की बोलीभाषा अन्यथा कर सकती है! – HostileFork

उत्तर

5

दोनों ptr के रूप में और बफर डेटा पूर्णांक संकेत दिए गए हैं, तो आप बस दूसरे के आवंटित:

ptr: buffer 

:variable वाक्य रचना केवल प्राप्त करने के लिए आवश्यक है जावा में "आदिम" प्रकार कहलाए जाने वाले पते का पता। यह बाइट के बराबर है !, पूर्णांक !, फ्लोट !, float32! और तर्क! लाल/प्रणाली के वर्तमान संस्करण में। अग्रणी : के बिना, कंपाइलर चर में संग्रहीत मूल्य प्रदान करेगा।

अन्य सभी प्रकार जैसे सी-स्ट्रिंग! और संरचना! (और इसलिए उपनाम!) वास्तव में पॉइंटर्स हैं। इसलिए जब संकलक संदर्भित होते हैं तो संकलक उनके मूल्य प्रदान करता है, जो एक स्मृति पता है।

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