मेरे पास 2 डी सरणी के सूचक के बारे में कोई प्रश्न है। एक सरणी2 डी सरणी के लिए एक सूचक
int a[2][3];
तो
की तरह कुछ है, तो यह सरणी a
के लिए सूचक है?
int (*p)[3] = a;
यदि यह सही है, मैं सोच रहा हूँ क्या [3]
int(*p)[3]
से क्या मतलब है?
मेरे पास 2 डी सरणी के सूचक के बारे में कोई प्रश्न है। एक सरणी2 डी सरणी के लिए एक सूचक
int a[2][3];
तो
की तरह कुछ है, तो यह सरणी a
के लिए सूचक है?
int (*p)[3] = a;
यदि यह सही है, मैं सोच रहा हूँ क्या [3]
int(*p)[3]
से क्या मतलब है?
int[2][3]
को '2 डी सरणी' के रूप में संदर्भित करने के बजाय, आपको इसे 'सरणी का सरणी' माना जाना चाहिए। यह एक सरणी है जिसमें दो आइटम हैं, जहां प्रत्येक आइटम स्वयं में 3 इंच के साथ एक सरणी है।
int (*p)[3] = a;
आप a
में दो आइटम में से किसी को इंगित करने के p
उपयोग कर सकते हैं। p
एक तीन-int सरणी को इंगित करता है - अर्थात्, ऐसा पहला आइटम। p+1
दूसरी तीन-int सरणी को इंगित करेगा। p
प्रारंभ करने में दूसरा तत्व को इंगित करने के लिए, का उपयोग करें:
int (*p)[3] = &(a[1]);
निम्नलिखित दो मदों की पहली को इंगित करने के बराबर तरीके हैं।
int (*p)[3] = a; // as before
int (*p)[3] = &(a[0]);
[3]
इस प्रकार का एक हिस्सा है। इस मामले में p
आकार 3 की एक सरणी के लिए एक सूचक है जो स्याही रखता है।
विशेष प्रकार के सरणी में हमेशा इसका आकार शामिल होता है, ताकि आपके पास int *[3]
या int *[5]
प्रकार हों, लेकिन केवल int *[]
नहीं है, जिसमें आकार को अपरिभाषित किया गया है।
int *x[20]; /* type of x is int *[20], not just int *[] */
int y[10][10]; /* type of y is int[10][10], not just int[][] */
आपकी टिप्पणी के लिए धन्यवाद। जब आप आकार कहते हैं, तो इसका मतलब है (* पी) में [0], [1]], [2] है? यदि यह मामला है, तो [2] के लिए एक कमरा कहां है? या यह [0] [0] और [0] [1] को इंगित करता है? – user1047092
'पी' बस 3 इन्स की सरणी के लिए एक सूचक है। यह नहीं जानता कि 'ए' का पहला आयाम 2 है, क्योंकि इसे 'ए' के पहले तत्व को सौंपा गया है, जो कि' int [3]' प्रकार का है। आपकी सहायता के लिए –
stricly बोल, नहीं, int (*p)[3] = a;
नहीं a
के लिए सूचक है। यह a
के पहले तत्व के लिए एक सूचक है। a
का पहला तत्व तीन चींटियों की एक सरणी है। p
तीन स्याही की एक सरणी के लिए एक सूचक है।
सरणी a
करने के लिए एक सूचक इस प्रकार घोषित किया जाएगा:
int (*q)[2][3] = &a;
p
और q
के संख्यात्मक मान संभावना (या शायद होने के लिए आवश्यक) एक ही हैं, लेकिन वे विभिन्न प्रकार के कर रहे हैं। जब आप p
या q
पर अंकगणित करते हैं तो यह खेल में आ जाएगा। p+1
सरणी a
के दूसरे तत्व को इंगित करता है, जबकि q+1
स्मृति a
के अंत से परे स्मृति को इंगित करता है।
याद रखें: cdecl आपका मित्र है: int a[2][3]
, int (*q)[2][3]
।
int a[2][3];
a
पूर्णांक की सरणी 3 की एक सरणी 2 जो केवल सरणियों की एक सरणी के रूप में पढ़ा जाता है। जब आप लिखते हैं,
int (*p)[3] = a;
यह पहला तत्व है जो एक सरणी है के सूचक के रूप p
की घोषणा की। तो, p
3 चींटियों की सरणी को इंगित करता है जो सरणी के सरणी का तत्व है।
int a[2][3]
+----+----+----+----+----+----+
| | | | | | |
+----+----+----+----+----+----+
\_____________/
|
|
|
p int (*p)[3]
यहाँ, p
अपने सूचक है जिसमें 3 ints जो सरणियों की सरणी का एक तत्व है की सरणी ओर इशारा करता है:
इस उदाहरण पर विचार।
वाह धन्यवाद। यह चित्र बहुत मदद करता है! ASCII कला के लिए – user1047092
+1। और शुद्धता, मुझे लगता है। –
"ए" के पहले मान को इंगित करने वाले पहले मान के साथ "पी" 3 पूर्णांक पॉइंटर्स की सरणी नहीं बन पाएगा? – Matthew
इसके अलावा नोट: -
पूर्णांक * p [5] // पी की एक सरणी के लिए 5 संकेत
पूर्णांक (* पी) [5] // पी अंक की एक सरणी है 5 इंच
int (* (पी +5)) [10] // पी संरचना के लिए एक सूचक है जहां संरचना के 5 वें तत्व में 10 इन्स हैं।
यह पहले से ही उपयोगी उत्तरों की सूची में कैसे जुड़ता है? – rayryeng
ओपी एक वैचारिक प्रश्न पूछता है और मैंने इसका उत्तर यहां दिया है। 5 डाल 3 के स्थान पर! इसके अलावा मैंने पॉइंटर्स का उपयोग करके 2 डी सरणी से मूल्य प्राप्त करने के तरीके के बारे में अधिक जानकारी दी है। – BigDataScholar
मैं तर्क दूंगा कि यह यहां प्रदान किए गए बाकी उत्तरों की तुलना में अधिक भ्रमित है। – rayryeng
उदाहरण के लिए आप '[3] ए' भी लिख सकते हैं :) यह सीखने का एक अच्छा तरीका है कि वास्तव में सी में कौन से सरणी हैं। – vsz
@vsz, मैं अपना मन नहीं बना सकता कि यह वास्तव में अच्छा है, या वास्तव में पागल है :-) –
@vsz: आपका मतलब है '3 [ए] '। –