मैंने कोड का एक टुकड़ा पढ़ा और पाया कि ऐसा कोई फ़ंक्शन है।फ़ंक्शन "int (* फ़ंक्शन()) [10];" क्या मतलब है?
int (*function())[10]{
...
}
मैं उलझन में हूं। इस समारोह का क्या अर्थ है और यह क्या लौटाएगा?
मैंने कोड का एक टुकड़ा पढ़ा और पाया कि ऐसा कोई फ़ंक्शन है।फ़ंक्शन "int (* फ़ंक्शन()) [10];" क्या मतलब है?
int (*function())[10]{
...
}
मैं उलझन में हूं। इस समारोह का क्या अर्थ है और यह क्या लौटाएगा?
यह एक फ़ंक्शन की परिभाषा है जो 10 पूर्णांक की सरणी में पॉइंटर लौटाती है।
याद रखें कि वापसी मूल्य सूचक है, वास्तविक सरणी नहीं। Arrays कार्यों से वापस नहीं किया जा सकता है। प्रति पैरा 8.3.5/8 स्टैंडर्ड की:
के प्रकार सूचक या संदर्भ का एक वापसी प्रकार हो सकता हैकार्य प्रकार सरणी या समारोह की वापसी प्रकार नहीं होगा, हालांकि वे ऐसी बातें
int arr[10]; // an array of 10 int
int (*ptr)[10]; // pointer to an array of 10 int
int (*function())[10] // function returning a pointer to an array of 10 int
{
return ptr;
}
int main()
{
int (*p)[10] = function(); // assign to the pointer
}
आप इस का उपयोग कर सकते हैं भी आप सामान्य रूप से एक सूचक का प्रयोग करेंगे:
यहाँ कैसे आप इसका इस्तेमाल होता है का एक सरल उदाहरण है। लेकिन ध्यान दें कि पॉइंटर्स की तुलना में बेहतर विकल्प हैं, जैसे std::shared_ptr<std::array<T, N>>
या std::shared_ptr<std::vector<T>>
।
क्या यह भी उपयोगी है? : - | मेरा मतलब जवाब नहीं है, मेरा मतलब यह है कि वापसी मूल्य आकार 10 की एक सरणी के लिए एक सूचक है। –
@ निकोससी।, मैं एक 'std :: array
@ निकोससी। हां, हम किसी अन्य ऑब्जेक्ट की तरह पॉइंटर लौट रहे हैं। एक और फायदा यह है कि यह केवल तभी संकलित होगा यदि सरणी आकार 10 है, कोई प्रकार का क्षय शामिल नहीं है। – 0x499602D2
जिस तरह से यह सबसे बाईं ओर के पहचानकर्ता खोजने के लिए और अपने रास्ते से काम करते हैं, याद है कि *
से पहले ()
और []
बाँध, इसलिए *a[]
संकेत की एक सरणी है करने के लिए है पढ़ने के लिए, (*a)[]
एक सरणी के लिए सूचक है, *f()
एक समारोह है एक सूचक वापस लौटना, और (*f)()
एक समारोह के लिए एक सूचक है। इस प्रकार,
function - function
function() - is a function
*function() - returning a pointer
(*function())[10] - to a 10-element array
int (*function())[10] - of int
कभी भी सरणी लौटने वाले फ़ंक्शंस में नहीं आया (या पहले एरे के पॉइंटर्स); दाईं ओर '[]' अजीब लग रहा है। मुझे लगता है कि जटिलता में अगला कदम इस समारोह में एक सूचक घोषित करेगा। –
इसे देखने का दूसरा तरीका 'फंक्शन() 'को प्रतीक' एफ 'के साथ प्रतिस्थापित करना है,' int (* f) [10]' देना; अब यह बहुत अजीब नहीं लग रहा है। –
बेशक, यह सही तर्क समझ वाक्यविन्यास के अनुसार बनाता है; यह सिर्फ इतना है कि आप इस मामले में आने के बिना वर्षों तक कोड कर सकते हैं, यह मुझे ऑफ-गार्ड पकड़ा ... मुझे लगता है कि आप हर दिन कुछ सीखते हैं;) –
यह है इसका मतलब है कि एक समारोह सूचक और तर्क शून्य है और बदले पूर्णांक [10]
http://cdecl.org और http://c-faq.com/decl/ spiral.anderson.html – chris
फ़ंक्शन पॉइंटर्स जैसे http://www.cprogramming.com/tutorial/function-pointers.html – user1929959
@ user1929959 के बारे में कुछ ट्यूटोरियल भी देखें: लेकिन फ़ंक्शन पॉइंटर्स के पास प्रश्न में कुछ भी करने के लिए कुछ भी नहीं है ? –