2015-09-03 12 views
8

कीवर्ड का उपयोग कर सी # में संपूर्ण सरणी को पिन करने के लिए कैसे करें नीचे दिए गए उदाहरण से fixed (int* pArray = &array[0]) लाइन पूरी सरणी पिन करें, या बस array[0]?कीवर्ड

int array = new int[10]; 
unsafe { 
    fixed (int* pArray = &array[0]) { } // or just 'array' 
} 
+0

मुझे नहीं लगता। आपको 'निश्चित (int * pArray = array) ' –

+0

@M करना होगा।kazemAkhgary, नहीं, यह काम नहीं करेगा: 'CS0208 एक प्रबंधित प्रकार (' int [] ') के लिए सूचक का आकार नहीं ले सकता है, उसका आकार नहीं ले सकता है,' –

+2

@ थॉमस लेवेस्क 'सर' से पहले नहीं रखता '। बस लिखें '(int * pArray = array) ' –

उत्तर

6

निम्न कथन:

fixed (int* pArray = array) 

पूरा सरणी ठीक कर देंगे।

एक निश्चित सूचक-प्रारंभकर्ता निम्न में से एक हो सकता है: सबूत C# language specification (धारा 18.6 तय बयान, जोर मेरा) में पाया जा सकता

...

  • एक अप्रबंधित प्रकार टी के तत्वों के साथ एक सरणी प्रकार की अभिव्यक्ति, बशर्ते कि प्रकार टी * निश्चित कथन में दिए गए सूचक प्रकार के लिए पूरी तरह परिवर्तनीय है। इस मामले में, प्रारंभकर्ता सरणी में पहले तत्व के पते की गणना करता है, और पूरे सरणी को निश्चित कथन की अवधि के लिए एक निश्चित पते पर रहने की गारंटी है। ...

निम्न कथन:

fixed (int* pArray = &array[0]) 

फिक्स पहले सरणी तत्व का पता। फिर, विनिर्देश से एक उद्धरण (एक उदाहरण से कि अध्याय में पाया जाता है):

...  
[third fixed statement:] fixed (int* p = &a[0]) F(p); 
... 

... और तीसरे बयान फिक्स और एक सरणी तत्व का पता प्राप्त करता है।


साइड नोट: मुझे लगता है यह होगा कि किसी भी समझदार कार्यान्वयन कि पहले तत्व ठीक करता है बस पूरे सरणी को ठीक करता है, लेकिन विनिर्देश यह गारंटी करने के लिए प्रतीत नहीं होता।

विनिर्देश में उदाहरण कोड में थोड़ा गहरा खुदाई निम्नलिखित का पता चलता है:

...  
[third fixed statement:] fixed (int* p = &a[0]) F(p); 
[fourth fixed statement:] fixed (int* p = a) F(p); 
... 

उदाहरण में चौथे तय बयान से ऊपर तीसरे लिए एक समान परिणाम पैदा करता है।

दुर्भाग्य से, वे निर्दिष्ट नहीं वास्तव में क्या वे "समान परिणाम" मतलब है, लेकिन यह ध्यान देने योग्य है कि वे यह नहीं कहा "ही परिणाम" है।

संबंधित मुद्दे