2012-01-17 13 views
20

मैं पॉइंटर्स की एक सरणी को कार्यान्वित करने की कोशिश कर रहा हूं, ताकि मैं तत्वों पर लूप कर सकूं। हालांकि मैं कैसे सही ढंग से ऐसा करने के लिए यकीन नहीं है:पॉइंटर्स के Arrays

TYPE(domain),POINTER    :: d01,d02,d03 
TYPE(domain),DIMENSION(:),POINTER :: dom 
... 

dom(1) => d01 
dom(2) => d02 
dom(3) => d03 
... 

और उसके बाद:

... 
IF(ASSOCIATED(dom(2),d02))THEN 
... 

संकलक (pgf90 10.6-0 64-बिट लक्ष्य पर x86-64 लिनक्स -tp इस्तांबुल -64)

PGF90-S-0074-Illegal number or type of arguments to associated - keyword argument pointer (test_ptr.f90: 10) 
    0 inform, 0 warnings, 1 severes, 0 fatal for MAIN 

जहां तक ​​मैं समझता हूँ, वहाँ कुछ मैं कैसे संकेत की एक सरणी सबसेट के बारे में गलत है: मुझे यह त्रुटि संदेश देता है। dom(2) और d02 दोनों रैंक 0 (स्केलर पॉइंटर्स) हैं। इसे लागू करने का सही तरीका क्या है?

धन्यवाद।

उत्तर

51

हाँ, पॉइंटर एरे फोर्ट्रान में मजाकिया हैं।

TYPE(domain),DIMENSION(:),POINTER :: dom 

, संकेत की एक सरणी को परिभाषित नहीं करता, जैसा कि आप सोच सकते हैं, लेकिन एक सरणी के लिए सूचक:

समस्या यह है कि यह है। फोरट्रान में इन चीजों के साथ आप कई अच्छी चीजें कर सकते हैं - बड़े सरणी के स्लाइस को इंगित करते हुए, यहां तक ​​कि स्ट्रिड्स के साथ भी - लेकिन यह निश्चित रूप से एक सरणी के लिए सूचक है, न कि पॉइंटर्स की एक श्रृंखला।

type domainptr 
    type(domain), pointer :: p 
end type mytype 

type(domainptr), dimension(3) :: dom 

dom(1)%p => d01 
dom(2)%p => d02 
dom(3)%p => d03 

आदि जहां तक ​​मेरा बता सकते हैं, केवल असली कारण आप फोरट्रान में यह करने के लिए है वाक्य रचना है:

फोरट्रान में संकेत के एरे प्राप्त करने के लिए एक ही रास्ता एक प्रकार को परिभाषित करने के लिए है। मुझे मानक के कुछ बाद के संस्करण में यह तय करना अच्छा लगेगा।

+1

धन्यवाद जोनाथन, यह एक अच्छा जवाब है। – milancurcic