यह मामला हो सकता है कि आप ऑब्जेक्ट उन्मुख भाषा जैसे जावा या पायथन जानते हैं, और अब आप सी भाषा सीख रहे हैं। char board[3][3]
के बारे में सोचते समय जावा और सी के बीच का अंतर यह है कि सी board
चर में स्मृति में 9 अक्षरों को आसन्न स्मृति पते पर दर्शाया गया है। इसलिए जैसा:
board: 1 2 3 4 5 6 7 8 9
सी में, &board
&board[0]
और &board[0][0]
रूप में एक ही स्मृति पता अर्जित करता है।
इस के विपरीत, जावा में चर char[][] board
के रूप में घोषित किया जाएगा और इसकी स्मृति प्रतिनिधित्व धारणात्मक इस प्रकार दिखाई देगा:
board: ptr(A) ptr(B) ptr(C)
A: 1 2 3
B: 4 5 6
C: 7 8 9
जहां x
की स्मृति पते पर ptr(x)
अंक। तो, जावा में, board
board[0]
से भिन्न स्मृति पते पर इंगित करता है।
आप सी में कहते हैं, & बोर्ड & बोर्ड [0] और & बोर्ड के रूप में ही स्मृति पता पैदावार [0] [0]। लेकिन मैं केवल बोर्ड [0] [0] (या) * बोर्ड [0] (या) ** बोर्ड के माध्यम से पहले तत्व तक पहुंचने में सक्षम हूं। ऐसा क्यों है??
हालांकि भाव &board
और &board[0]
और &board[0][0]
एक ही पते उपज, सी भाषा के प्रकार प्रणाली char
मूल्य तक पहुँचने से रोक रही है। एक सी संकलक में, प्रकार (धारणात्मक) कर रहे हैं:
board: type char[3][3]
board[0]: type char[3]
board[0][0]: type char
प्रकार char
के एक चर मान लिया जाये कि, हम लिख सकते हैं:
char c;
c = board[0][0];
लेकिन नहीं लिख सकते हैं:
char c;
c = board; // Error
c = board[0]; // Error
क्योंकि बाएं तरफ टाइप करें असाइनमेंट के दाहिने तरफ के प्रकार के साथ असंगत है।
आप यह सुनिश्चित करें कि एक char
के लिए एक भाषण अंक, आप एक प्रकार डाली का उपयोग कर सकते हैं:
char c;
c = *(char*)board; // Works OK
c = *(char*)board[0]; // Works OK
नकारात्मक पक्ष यह है कि इस तरह के प्रकार डाले कोडिंग कीड़े को जन्म दे सकती है।
आपकी प्रतिक्रिया के लिए हाय धन्यवाद और मैं आंशिक रूप से समझता हूं। क्या आप अपनी टिप्पणी समझाते हुए एक सरल नमूना कार्यक्रम प्रदान कर सकते हैं। मैं बहुत मददगार होगा। धन्यवाद। – intex0075
@intex आपका प्रश्न * है * सरल उदाहरण प्रोग्राम जो मैं प्रदान करता हूं। –