** सूचक को दो आयामी सरणी कैसे असाइन करें? यह है कि क्या मैं** सूचक के लिए दो आयामी सरणी कैसे असाइन करें?
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
इसलिए किसी भी मदद करना चाहते हैं का विचार है? अग्रिम
** सूचक को दो आयामी सरणी कैसे असाइन करें? यह है कि क्या मैं** सूचक के लिए दो आयामी सरणी कैसे असाइन करें?
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
इसलिए किसी भी मदद करना चाहते हैं का विचार है? अग्रिम
सरल उत्तर यह है कि आप नहीं कर सकते हैं। एक बिडिमेंशनल सरणी स्मृति की एक संगत ब्लॉक है जो प्रत्येक पंक्ति को रखती है, जबकि पॉइंटर के पॉइंटर एक स्मृति स्थान को संदर्भित कर सकता है जहां पूर्णांक वाले एक अलग स्मृति स्थान का सूचक होता है।
आप दूसरी ओर एक अलग डेटा संरचना बना सकते हैं जो आपके इच्छित तरीके से तत्वों को पॉइंटर्स रखता है (यानी पॉइंटर्स की एक सरणी बनाएं, प्रत्येक पॉइंट की शुरुआत में उन पॉइंटर्स को प्रारंभ करें, और पॉइंटर का उपयोग करें pointer
के रूप में पॉइंटर्स की सरणी), लेकिन यह बिल्कुल उपयोगी नहीं है, बल्कि यह सब कुछ अनियंत्रित रूप से जटिल करेगी।
प्रश्न आम गलत धारणाओं से आता है कि सरणी और पॉइंटर्स समान हैं, जो वे नहीं हैं। एक सरणी सरणी के पहले तत्व में पॉइंटर को क्षीण कर सकती है (और अक्सर ऐसा करेगी), लेकिन उस सूचक का प्रकार पहले तत्व का प्रकार है। एक द्विपक्षीय सरणी में, पहले तत्व का प्रकार आंतरिक सरणी है, मूल तत्व प्रकार नहीं।
में धन्यवाद इस तरह सूचक घोषित:
int (*pointer)[3] = array;
लेकिन इस असीम C++ बुरा है। शायद आपको एक बेहतर समाधान मिल सकता है (एक वैक्टर और क्या नहीं) यदि आपने समझाया कि आपका सामान्य उद्देश्य क्या है।
सहमत हुए। एसटीएल बहुत सी सिरदर्द बचाएगा। – chris
यह वही नहीं है जो मैं चाहता हूं, यह एक आयामी सरणी आपके प्रयास के लिए धन्यवाद –
@AhmedZainElDein: जो आप नहीं चाहते हैं, और यह कुछ ऐसा प्रदान करने का एक दृष्टिकोण है जो * स्रोत * आपके साथ संगत होगा *चाहते हैं*। –
ठीक है, आपको बहुत धन्यवाद, मुझे पता है कि सरणी स्वयं एक सूचक है उदाहरण के लिए arr [2] इसके साथ सौदा किया जा सकता है जैसे * arr * (एआर + 1) = 3 मैं एक ही चीज़ कैसे कर सकता हूं लेकिन दो आयामी सरणी के साथ ?? arr [3] [2], क्या मैं कह सकता हूं ** arr = 0 आदि ...... –
@ अहमदज़ैन एल्डेन: नहीं, आप गलत हैं और यह एक आम गलतफहमी है। सरणी ** ** नहीं है जो पहले तत्व के लिए एक सूचक है, वे पूरी तरह से अलग प्रकार हैं, भले ही सरणी से पहले तत्व में एक सूचक से एक अंतर्निहित रूपांतरण हो। एक बार जब आप वास्तव में समझते हैं कि वे * एक ही चीज़ नहीं हैं तो यह समझना आसान होगा कि आप जो भी मांग रहे हैं वह नहीं किया जा सकता है। इसे देखने का एक और तरीका बोली-आयामी सरणी (आकार एन * एम तत्वों का एकल ब्लॉक) के मेमोरी लेआउट को चित्रित कर रहा है और फिर यह महसूस कर रहा है कि उस ब्लॉक के अंदर कोई सूचक नहीं है, इसलिए आप इसे पॉइंटर नहीं बना सकते –
प्रबुद्ध के लिए धन्यवाद मैंमैं जो कह रहा हूं उसके लिए मैं अधिक इच्छुक हूं क्योंकि मैं एआर [3] [2] को पर संदर्भित करने के लिए दूर नहीं जा सकता क्योंकि यह मुझे एक और सवाल पूछता है कि एक आयामी सरणी में यह int arr [2], मैं कह सकता हूं * arr = 0; * (arr + 1) = 3 –