निम्नलिखित में से कौन-सा प्रचालक (ऑपरेटर), संरचना चर (स्ट्रक्चर वैरिएबल) और इसके अवयव (एलिमेंट) को जोड़ता है?
- (a)डॉट ऑपरेटर
- (b)प्लस ऑपरेटर
- (c)माइनस ऑपरेटर
- (d)मल्टिप्लाइ ऑपरेटर
सही उत्तर — A, (a) डॉट ऑपरेटर — यही वह प्रचालक है जो संरचना चर के नाम और उसके भीतर रखे किसी अवयव के नाम को जोड़ता है। संरचना (structure) C भाषा की वह सुविधा है जिसमें भिन्न-भिन्न प्रकार के कई चर एक ही नाम के नीचे इकट्ठे रखे जाते हैं — जैसे किसी कर्मचारी के लिए नाम, आयु और वेतन, जो क्रमशः वर्ण-शृंखला, पूर्णांक और दशमलव हो सकते हैं। सरणी (array) से इसका भेद यही है : सरणी में सभी अवयव एक ही प्रकार के होते हैं और उन तक क्रमांक से पहुँचा जाता है, जबकि संरचना में अवयव भिन्न प्रकार के होते हैं और उन तक नाम से पहुँचा जाता है। नाम से पहुँचने का वही काम डॉट प्रचालक करता है। लिखने का रूप है : संरचना चर का नाम, फिर बिंदु, फिर अवयव का नाम — जैसे emp.salary। यहाँ बिंदु के बाईं ओर वह चर है जो स्मृति में बना हुआ है और दाईं ओर उस चर के भीतर का एक क्षेत्र; प्रचालक दोनों को जोड़कर उस एक क्षेत्र तक पहुँचा देता है, जिसे पढ़ा भी जा सकता है और जिसमें मान रखा भी जा सकता है। यदि संरचनाएँ एक-दूसरे के भीतर हों तो बिंदु दोहराया जाता है — a.b.c — और हर बिंदु एक स्तर भीतर ले जाता है। एक जुड़ा हुआ रूप भी साथ ही याद कर लीजिए, क्योंकि परीक्षा उसी को उलटकर पूछती है। यदि संरचना तक सूचक (pointer) के द्वारा पहुँचा जा रहा हो, तो बिंदु के स्थान पर तीर वाला प्रचालक लगता है — ptr->salary — जो (*ptr).salary का ही संक्षिप्त रूप है। अर्थात् चर के लिए बिंदु, सूचक के लिए तीर। हिन्दी पाठ का एक शब्द ध्यान माँगता है। पुस्तिका ने member के लिए ‘अवयव (एलिमेंट)’ लिखा है, जबकि C की पाठ्यपुस्तकें संरचना के भीतर की मदों को सदस्य (member) कहती हैं और ‘एलिमेंट’ प्रायः सरणी के अवयव के लिए सुरक्षित रखती हैं। अर्थ यहाँ वही है, पर पढ़ते समय यह भ्रम हो सकता है कि प्रश्न सरणी की बात कर रहा है — कर नहीं रहा, स्टेम में स्पष्ट रूप से संरचना चर लिखा है।
- (b)प्लस ऑपरेटर — प्लस प्रचालक अंकगणितीय जोड़ का प्रचालक है, जो संख्यात्मक मानों पर काम करता है और सूचकों के साथ सूचक-अंकगणित करता है। संरचना चर और उसके अवयव का संबंध जोड़ का है ही नहीं — वहाँ कोई राशि किसी दूसरी राशि में जोड़ी नहीं जा रही, केवल एक बड़े चर के भीतर से एक क्षेत्र चुना जा रहा है, और यह चुनाव नाम से होता है, गणना से नहीं। एक बात और, जो इस विकल्प को पूरी तरह काट देती है : C में प्रचालक-अधिभार (operator overloading) होता ही नहीं, इसलिए दो संरचना चरों को प्लस प्रचालक से जोड़ा भी नहीं जा सकता; ऐसा करने पर संकलक त्रुटि देता है। C में संरचनाओं पर सीधे जो एक काम होता है वह पूरा-का-पूरा समनुदेशन है, अर्थात् एक संरचना चर का मान दूसरे में रख देना।
- (c)माइनस ऑपरेटर — माइनस प्रचालक घटाव करता है और एकल रूप में चिह्न बदलता है; अवयव तक पहुँचने से उसका कोई संबंध नहीं। इस विकल्प में एक चतुर जाल छिपा है, इसलिए इसे ध्यान से देखिए : सूचक के द्वारा संरचना के अवयव तक पहुँचने वाला तीर प्रचालक लिखने में ऋण-चिह्न और उससे बड़ा-चिह्न मिलाकर बनता है, इसलिए जल्दबाज़ी में उसे ‘माइनस’ पढ़ लिया जा सकता है। किंतु वह एक अलग और एकल प्रचालक है, दो चिह्नों का जोड़ नहीं, और वह भी तभी लगता है जब बाईं ओर सूचक हो। यहाँ स्टेम में संरचना चर कहा गया है, सूचक नहीं, इसलिए उत्तर बिंदु ही रहेगा।
- (d)मल्टिप्लाइ ऑपरेटर — मल्टिप्लाइ प्रचालक गुणा करता है, और C में वही चिह्न दो और कामों में आता है — सूचक की घोषणा में, तथा सूचक से मान निकालने की क्रिया में। यही दूसरा काम इस विकल्प को आकर्षक बनाता है, क्योंकि सूचक द्वारा संरचना के अवयव तक पहुँचने का विस्तृत रूप (*ptr).salary है, जिसमें वह चिह्न दिखाई देता है। पर वहाँ भी उसका काम केवल इतना है कि सूचक से संरचना तक पहुँचा जाए; संरचना और उसके अवयव को जोड़ने का काम उसके बाद आने वाला बिंदु ही करता है, और कोष्ठक इसीलिए लगाने पड़ते हैं कि बिंदु की पूर्विकता अधिक है। अर्थात् इस रूप में भी जोड़ने वाला प्रचालक बिंदु है, गुणा का चिह्न नहीं।
C में संरचना एक उपयोक्ता-परिभाषित आँकड़ा-प्रकार है, जो भिन्न प्रकार के कई चरों को एक तार्किक इकाई में बाँधता है; उसकी घोषणा struct शब्द से होती है और उसके भीतर के चर सदस्य कहलाते हैं। इस इकाई तक दो रास्ते हैं और भाषा ने दोनों के लिए अलग-अलग प्रचालक रखे हैं। यदि हमारे पास संरचना चर स्वयं है, तो सदस्य तक पहुँचने के लिए बिंदु वाला सदस्य-पहुँच प्रचालक लगता है : चर.सदस्य। यदि हमारे पास उस संरचना का पता, अर्थात् सूचक है, तो तीर वाला प्रचालक लगता है : सूचक->सदस्य, जो दरअसल पहले सूचक से मान निकालने और फिर बिंदु लगाने का संक्षेप है। दोनों प्रचालक पश्च-प्रत्यय (postfix) वर्ग में आते हैं, इनकी पूर्विकता सबसे ऊँची है और साहचर्य बाएँ से दाएँ, यही कारण है कि a.b.c जैसी अभिव्यक्ति बाईं ओर से एक-एक स्तर खुलती जाती है और (*ptr).salary में कोष्ठक अनिवार्य हो जाते हैं। यह भी ध्यान रखिए कि यही बिंदु आगे की भाषाओं में वस्तु के सदस्यों तक पहुँचने का चिह्न बन गया, इसलिए इसे केवल C की बात मत मानिए।
यह प्रश्न कंप्यूटर खंड के उस भाग से है जो भाषा की वाक्य-रचना की बुनियादी पहचान परखता है, और ऐसे प्रश्नों में विकल्प प्रायः एक सही प्रचालक और तीन अंकगणितीय प्रचालक होते हैं, ताकि उत्तर उसी को मिले जिसने प्रचालकों को उनके काम के अनुसार वर्गीकृत कर रखा हो। इसलिए तैयारी करते समय प्रचालकों को अलग-अलग परिवारों में बाँटकर याद कीजिए : अंकगणितीय, संबंधात्मक, तार्किक, बिटवार, समनुदेशन, तथा वे विशेष प्रचालक जो न गणना करते हैं न तुलना — बिंदु, तीर, कोष्ठक वाला सरणी-सूचकांक, कॉमा, आकार बताने वाला sizeof और शर्त वाला त्रिचर प्रचालक। संरचना का व्यावहारिक महत्त्व भी समझ लीजिए : अभिलेख-आधारित आँकड़े, जैसे कर्मचारी विवरण या भविष्य निधि खाते का ब्यौरा, स्वाभाविक रूप से संरचनाओं में रखे जाते हैं, और उनकी सरणी बनाकर पूरी सूची संभाली जाती है। तब हर अभिलेख तक क्रमांक से और उसके भीतर हर क्षेत्र तक बिंदु से पहुँचा जाता है।
- संरचना भिन्न-भिन्न प्रकार के चरों को एक नाम के नीचे रखती है, जबकि सरणी में सभी अवयव एक ही प्रकार के होते हैं; संरचना के भीतर पहुँच नाम से होती है, क्रमांक से नहीं।
- संरचना चर के सदस्य तक पहुँचने का प्रचालक बिंदु है और उसका रूप है चर.सदस्य, जैसे emp.salary; इसे पढ़ा भी जा सकता है और उसमें मान रखा भी जा सकता है।
- यदि संरचना तक सूचक के द्वारा पहुँचा जाए तो तीर वाला प्रचालक लगता है — ptr->salary — जो (*ptr).salary का ही संक्षिप्त रूप है।
- बिंदु और तीर दोनों पश्च-प्रत्यय वर्ग के प्रचालक हैं, इनकी पूर्विकता सर्वोच्च है और साहचर्य बाएँ से दाएँ; इसीलिए (*ptr).salary में कोष्ठक अनिवार्य हैं।
- C में प्रचालक-अधिभार नहीं होता, इसलिए दो संरचना चरों को जोड़ने-घटाने के लिए अंकगणितीय प्रचालक प्रयोग नहीं किए जा सकते; पूरे चर का समनुदेशन अवश्य संभव है।
- पुस्तिका ने member के लिए ‘अवयव (एलिमेंट)’ लिखा है, जबकि C की शब्दावली में संरचना के भीतर की मदें सदस्य कहलाती हैं और एलिमेंट प्रायः सरणी के अवयव के लिए प्रयुक्त होता है।
- ‘अवयव (एलिमेंट)’ पढ़कर प्रश्न को सरणी का मान लेना; स्टेम में संरचना चर स्पष्ट रूप से लिखा है।
- सूचक वाले रूप और चर वाले रूप को मिला देना; बिंदु चर के लिए है और तीर सूचक के लिए।
- तीर प्रचालक को ऋण-चिह्न का ही एक रूप समझ लेना; वह एक अलग एकल प्रचालक है।
- (*ptr).salary में गुणा वाले चिह्न को जोड़ने वाला प्रचालक मान लेना; वह केवल सूचक से मान निकालता है, जोड़ने का काम बिंदु ही करता है।
- यह मान लेना कि C में संरचनाओं पर अंकगणितीय प्रचालक चल जाएँगे; भाषा में प्रचालक-अधिभार है ही नहीं।
इस विषय से प्रश्न तीन रूपों में आते हैं। पहला रूप यही है — प्रचालक की पहचान, जिसमें एक विशेष प्रचालक के विरुद्ध तीन अंकगणितीय प्रचालक रख दिए जाते हैं; ऐसे प्रश्न कुछ ही क्षणों के होते हैं यदि प्रचालक परिवारों के अनुसार याद हों। दूसरा रूप उलटकर पूछता है : सूचक दिया जाता है और पूछा जाता है कि अब कौन-सा प्रचालक लगेगा, या दोनों रूपों की तुल्यता पुछवाई जाती है। तीसरा रूप संरचना बनाम सरणी बनाम यूनियन का भेद पूछता है — किसमें सभी सदस्य एक ही प्रकार के होते हैं, किसमें सभी सदस्य एक ही स्मृति-स्थान साझा करते हैं, और किसका आकार कैसे तय होता है। तीनों के लिए एक ही तैयारी पर्याप्त है : प्रचालकों की तालिका उनके काम के अनुसार बनाइए, और संरचना से जुड़े दोनों प्रचालक — बिंदु और तीर — सदा जोड़े में याद रखिए।
इस प्रश्न से सीधे संबंधित कोई पूर्व PYQ उपलब्ध नहीं।
- practice — not a real PYQ
C में यदि किसी संरचना तक सूचक (pointer) के द्वारा पहुँचा जा रहा हो, तो उसके सदस्य तक पहुँचने के लिए कौन-सा प्रचालक प्रयुक्त होता है?
- (a)डॉट प्रचालक
- (b)तीर (ऐरो) प्रचालक
- (c)कॉमा प्रचालक
- (d)मॉड्युलस प्रचालक
उत्तर(b) तीर (ऐरो) प्रचालक
- practice — not a real PYQ
C की संरचना (structure) के बारे में निम्नलिखित में से कौन-सा एक कथन सही है?
- (a)उसके सभी सदस्यों का प्रकार समान होना आवश्यक है
- (b)वह भिन्न-भिन्न प्रकार के सदस्यों को एक ही नाम के अंतर्गत रखती है
- (c)दो संरचना चरों को प्लस प्रचालक से जोड़ा जा सकता है
- (d)उसके सदस्य तक पहुँचने के लिए वर्गाकार कोष्ठक और क्रमांक का प्रयोग होता है
उत्तर(b) वह भिन्न-भिन्न प्रकार के सदस्यों को एक ही नाम के अंतर्गत रखती है