2011-01-17 22 views
8

मेरे मस्तिष्क अभी हाल ही में एक बहुत अस्पष्ट हो गया है और मैं के लिए मुझे के जीवन याद नहीं कर सकते क्यों निम्नलिखित सी कोड:आप सी में 2 आयामी सरणी कैसे डाल सकते हैं?

char a[3][3] = { "123", "456", "789" }; 
char **b = a; 

उत्पन्न करता है निम्न चेतावनी:

warning: initialization from incompatible pointer type 

सकता है किसी को कृपया मेरे लिए यह समझाओ।

धन्यवाद।

char* b = a; 
+2

कृपया ध्यान दें कि आपकी घोषणा में "123" अब स्ट्रिंग नहीं है क्योंकि आपने \ 0 को छोटा कर दिया है। स्ट्रिंग के रूप में "123" में 4 वर्ण होते हैं, न कि 3. – DReJ

उत्तर

10
char (*b)[3] = a; 

यह एक सूचक का आकार 3. नोट सरणियों चार करने के लिए है कि इस char *b[3], जो 3 चार संकेत की एक सरणी के रूप में b वाणी के समान नहीं है के रूप में b की घोषणा की।

यह भी ध्यान दें कि char *b = a गलत है और अभी भी char **b = a के समान चेतावनी उत्सर्जित करता है।

+0

+1: अब तक का सबसे उपयोगी उत्तर। –

-1

a अभी भी एक चार के लिए सूचक है। a एक सूचक है।

char *b चार को एक पॉइंटर परिभाषित करता है।

char **b पॉइंटर को चार में पॉइंटर को परिभाषित करता है।

+0

यूप यह है। मुझे कोडिंग होने के लिए रात में बहुत देर हो चुकी है। – stretchkiwi

+0

आपके उत्तर के लिए धन्यवाद। – stretchkiwi

+5

यह सही नहीं है। 'ए' अपने पहले तत्व के लिए एक सूचक के लिए decays; 'ए'' char [3] 'की सरणी है; इसके पहले तत्व के सूचक में 'char (*) [3] '' char * 'टाइप नहीं है। यह पॉइंटर प्रारंभिक मूल कोड के रूप में बिल्कुल वही असंगत सूचक प्रकार चेतावनी उत्पन्न करता है। –

0

यह सही है:

+1

'ए 'एक सूचक नहीं है; 'ए 'एक सरणी है। एक अयोग्य बयान कहता है कि 'ए' एक सूचक सही नहीं है। –

+0

ठीक है। सटीक होने के लिए, आप सही हैं। – NoviceCai

0

समस्या यह है कि ** स्थिर रूप से आवंटित नहीं है।

आप निम्नलिखित के साथ इस सरल संस्करण को पूरा कर सकते:

char a[3][3] = {"123", "456", "789"}; 
char *b[3] = {a[0], a[1], a[2]}; 
1

इस प्रयास करें,

char a[3][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9' }}; 
    char *b = &a[0][0]; 

के बाद से, एक सरणियों आप उन्हें एक चरित्र के रूप में प्रारंभ करने की आवश्यकता के चरित्र सरणी है।

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