मैं पॉइंटर्स के साथ काम कर रहा था और एक समस्या के साथ आया था। अब तक मुझे पता है कि जब हम किसी भी डेटा प्रकार की सरणी बनाते हैं, तो सरणी का नाम वास्तव में एक सूचक (शायद स्थैतिक सूचक) होता है जो सरणी की पहली अनुक्रमणिका की ओर इशारा करता है। सही बात?सरणी वीएस पॉइंटर-टू-पॉइंटर का पता: वही नहीं?
तो क्या मैं प्राप्त करने के लिए कोशिश कर रहा हूँ एक और सूचक है कि सरणी नाम का पता पकड़ सकता है बनाने के लिए है (यानी एक और सूचक जो मेरे मामले में सरणी नाम है की दिशा में एक सूचक)
उदाहरण के लिए:
char name[] = "ABCD"; // name holding the address of name[0]
char *ptr1 = name; // When this is possible
char **ptr2 = &name; // Why not this. It give me error that cannot convert char(*)[5] to char**
मैं आईडीई के रूप में कोड ब्लॉक का उपयोग कर रहा हूं।
नहीं, नहीं, नहीं। कोई सरणी सूचक नहीं है। एक समारोह में पारित होने पर यह एक सूचक को क्षय हो सकता है लेकिन यह एक सूचक नहीं है। पॉइंटर्स के रूप में सरणी के बारे में मत सोचो। – NathanOliver
तो आपका मतलब है जब मैंने char * ptr1 = name लिखा था; यह वास्तव में char * ptr1 = और नाम [0] किया था; ? और नाम खुद एक अलग सूचक चर नहीं है? –
Arrays "सख्त" पॉइंटर्स नहीं हैं। सूचक कुछ स्मृति स्थान है जिसमें एक पता होता है। जब आप एक सरणी कंपाइलर का उपयोग करते हैं तो पता है कि इसका पता क्या है, लेकिन यह कहीं भी संग्रहीत नहीं है और इसे ओवरराइट नहीं किया जा सकता है। आपका दूसरा बयान इंगित करता है कि आप * ptr2 = somethingelse कर सकते हैं, जो नहीं किया जा सकता है। – nsilent22