सी ++ चर और प्रकार: इंट, डबल, चार, स्ट्रिंग, बूल

विषय - सूची:

Anonim

C ++ में चर

एक C ++ वैरिएबल हमें एक नामित भंडारण क्षमता प्रदान करता है। यह प्रोग्रामर को आवश्यकता के अनुसार डेटा में हेरफेर करने की अनुमति देता है। हर वैरिएबल का C ++ में एक प्रकार है। वेरिएबल टाइप वेरिएबल के मेमोरी मैप के साइज और लेआउट को निर्धारित करने में मदद करता है, उस मेमोरी में स्टोर किए जाने वाले वैल्यू की रेंज और ऑपरेशंस का सेट जो उस पर लागू हो सकता है।

इस C ++ ट्यूटोरियल में, आप सीखेंगे:

  • C ++ में चर
  • C ++ में मूल प्रकार के चर
  • C ++ में चर घोषित करने के नियम
  • C ++ परिवर्तनीय डेटा प्रकार
  • परिवर्तनीय नाम या पहचानकर्ता
  • C ++ में कांस्टेबल योग्यता
  • C ++ में वेरिएबल्स का स्कोप
  • परिवर्तनीय प्रकार रूपांतरण
  • चर रजिस्टर
  • बच अनुक्रम

C ++ में मूल प्रकार के चर

यहाँ C ++ चर के मूल प्रकार हैं:

इंट:

पूर्णांक एक संख्यात्मक शाब्दिक (संख्याओं से जुड़ा हुआ) बिना किसी अंश या घातीय भाग के होता है। उदाहरण। 120, -90, आदि।

डबल:

यह एक डबल-सटीक फ़्लोटिंग पॉइंट मान है। उदाहरण: 11.22, 2.345

चार:

एक चरित्र शाब्दिक एकल उद्धरण चिह्नों के अंदर एक एकल वर्ण संलग्न करके बनाया गया है। उदाहरण के लिए: 'a', 'm', 'F', 'P', '}' आदि।

फ्लोट:

एक फ्लोटिंग-पॉइंट शाब्दिक एक संख्यात्मक शाब्दिक है जिसमें एक आंशिक रूप या एक घातांक रूप होता है। उदाहरण के लिए: 1.3, 2.6

स्ट्रिंग साहित्य:

एक स्ट्रिंग शाब्दिक दोहरे उद्धरण चिह्नों में संलग्न वर्णों का एक क्रम है। उदाहरण के लिए: "आप कैसे हैं?"

बूल:

यह बूलियन मान को सही या गलत मानता है।

C ++ में चर घोषित करने के नियम

एक चर का नामकरण करने के लिए यहां कुछ सामान्य नियम दिए गए हैं:

  • C ++ वैरिएबल नाम में केवल अक्षर, संख्या और अंडरस्कोर हो सकते हैं।
  • C ++ वैरिएबल नाम एक संख्या से शुरू नहीं हो सकता है।
  • परिवर्तनीय नाम एक बड़े अक्षर से शुरू नहीं होने चाहिए।
  • C ++ में उपयोग किया जाने वाला एक चर नाम एक कीवर्ड नहीं हो सकता है। उदाहरण के लिए, int एक कीवर्ड है जिसका उपयोग पूर्णांकों को निरूपित करने के लिए किया जाता है।
  • एक C ++ वैरिएबल नाम एक अंडरस्कोर के साथ शुरू हो सकता है। हालाँकि, यह एक अच्छा अभ्यास नहीं माना जाता है।

C ++ परिवर्तनीय डेटा प्रकार

C ++ आदिम प्रकारों के एक पूरे सेट को परिभाषित करता है

शून्य प्रकार कोई संबंधित किया जाता है इसके साथ मूल्यों और केवल कुछ परिस्थितियों में इस्तेमाल किया जा सकता। यह आमतौर पर उन प्रकार के कार्यों के रूप में होता है जो मान नहीं लौटाते हैं।

अंकगणित प्रकार वर्ण, पूर्णांकों, बूलियन मूल्यों, और चल बिन्दु संख्या में शामिल हैं। अंकगणित प्रकार यदि आगे 2 श्रेणियों में विभाजित किया गया है

  1. फ्लोटिंग-पॉइंट प्रकार । फ्लोट (या फ्लोटिंग प्रकार) दशमलव संख्या का प्रतिनिधित्व करते हैं। IEEE मानक महत्वपूर्ण अंकों की एक न्यूनतम संख्या निर्दिष्ट करता है। अधिकांश कंपाइलर आमतौर पर निर्दिष्ट न्यूनतम से अधिक परिशुद्धता प्रदान करते हैं। आमतौर पर, फ़्लोट्स का प्रतिनिधित्व 32 बिट्स द्वारा किया जाता है, 64 बिट्स में डबल्स, और 96 या 128 बिट्स में लंबे डबल्स।
  2. अभिन्न प्रकार (जिसमें वर्ण, पूर्णांक और बूलियन प्रकार शामिल हैं)। बूलियन सही या गलत: प्रकार मान केवल दो प्रकार के हैं। कई चार प्रकार हैं, जिनमें से अधिकांश अंतर्राष्ट्रीयकरण का समर्थन करने के लिए मौजूद हैं। सबसे बुनियादी चरित्र प्रकार चार है। एक चार एकल मशीन बाइट के समान आकार का अर्थ है एक बाइट।

इंटीग्रल प्रकार हस्ताक्षर या अहस्ताक्षरित जा सकता है।

हस्ताक्षरित प्रकार : वे नकारात्मक या सकारात्मक संख्या (शून्य सहित) का प्रतिनिधित्व करते हैं। एक हस्ताक्षरित प्रकार में, सीमा को समान रूप से + ve और -ve मानों के बीच विभाजित किया जाना चाहिए। इस प्रकार, एक 8-बिट हस्ताक्षरित चार्ट 127 के माध्यम से -127 से मान रखेगा।

अहस्ताक्षरित प्रकार : एक अहस्ताक्षरित प्रकार में, सभी मान हैं> = 0. एक 8-बिट अहस्ताक्षरित चार्ट में 255 (दोनों समावेशी) के माध्यम से 0 हो सकते हैं।

परिवर्तनीय नाम या पहचानकर्ता

पहचानकर्ता कुछ अक्षरों, अंकों और अंडरस्कोर चरित्र या उनमें से कुछ संयोजन से बना हो सकता है। नाम की लंबाई पर कोई सीमा नहीं लगाई गई है।

पहचान वालों को चाहिए

  • या तो एक पत्र या एक अंडरस्कोर ('_') से शुरू करें।
  • और केस-संवेदी हैं; ऊपरी और निचले अक्षर अलग हैं:

// चार अलग-अलग इंट चर को परिभाषित करता है

int guru99, gurU99, GuRu99, GURU99;

C ++ भाषा ने इसके उपयोग के लिए कुछ नाम आरक्षित किए हैं।

विभिन्न प्रोग्रामिंग भाषाओं में चर नामकरण के लिए कई स्वीकृत परंपराएं हैं। इन सम्मेलनों के बाद कार्यक्रम की पठनीयता में सुधार हो सकता है।

  • एक पहचानकर्ता को इसके अर्थ के कम से कम कुछ संकेत देने चाहिए।
  • परिवर्तनीय नाम आमतौर पर लोअरकेस-गुरू 99 हैं, न कि गुरू 99 या गुरू 99।
  • जिन वर्गों को हम परिभाषित करते हैं, वे आमतौर पर एक बड़े अक्षर से शुरू होते हैं।
  • कई शब्दों वाले पहचानकर्ताओं को हर शब्द को अलग-अलग देखना चाहिए। उदाहरण के लिए, Guru99_website नहीं गुरु99website।

C ++ परिवर्तनीय घोषणा और परिभाषा

एक वैरिएबल की घोषणा उस नाम को प्रोग्राम में उस दायरे में बताती है जिसमें इसे परिभाषित किया गया है। उदाहरण:

int a=5;int b;char c='A';
int a,b;a=b=1000;
List initializationint a(5);int b{5};

C ++ में कांस्टेबल योग्यता

मान लीजिए कि एक चर बफ़राइज़ है जो उपयोगकर्ता से लिए जाने वाले इनपुट की संख्या बताता है। यहाँ, हम पूरे कार्यक्रम में बफ़साइज़ के मान को बदलना नहीं चाहते हैं। हम एक वैरिएबल को परिभाषित करना चाहते हैं जिसका मूल्य हमें पता होना चाहिए कि उसे बदलना नहीं चाहिए।

ऐसे में कीवर्ड कांस्टेबल का इस्तेमाल करें

const int bufSize = 512; // input buffer size

यह bufSize को स्थिरांक के रूप में परिभाषित करता है। BfSize को असाइन करने या बदलने का कोई भी प्रयास त्रुटि देता है।

यहाँ, हम एक कास्ट ऑब्जेक्ट के मान को बदल नहीं सकते हैं जब हम इसे बनाते हैं, तो इसे अनिवार्य घोषित किया जाना चाहिए और आरंभीकृत किया जाना चाहिए। अन्यथा संकलक एक त्रुटि फेंकता है।

const int i = get_size(); // ok: initialized at run timeconst int j = 42; // ok: initialized at compile timeconst int k; // error: k is uninitialized constint i = 42;const int ci = i; // ok: the value in i is copied into ci

C ++ में वेरिएबल्स का स्कोप

स्कोप एक प्रोग्राम का एक स्पैन है जहां एक वेरिएबल का एक अर्थ होता है। अधिकतर एक ही नाम का उपयोग अलग-अलग संस्थाओं के अलग-अलग दायरे में करने के लिए किया जा सकता है। चर उस बिंदु से दिखाई देते हैं जहां उन्हें उस दायरे के अंत तक घोषित किया जाता है जिसमें उनकी घोषणा प्रकट होती है।

#include int main(){int sum = 0;// sum values from 1 through 10 inclusivefor (int val = 1; val <= 10; ++val)sum += val; // equivalent to sum = sum + valcout << "Sum of 1 to 10 inclusive is "<< sum <

यह कार्यक्रम 3 नामों को परिभाषित करता है, अर्थात, मुख्य, सम और वेल। यह उस नाम स्थान से दो अन्य नामों के साथ-साथ नामस्थान std का उपयोग करता है, cout और endl।

  • फ़ंक्शन नाम "मुख्य" घुंघराले ब्रेस के बाहर परिभाषित किया गया है। फ़ंक्शन नाम मुख्य-जैसे अधिकांश फ़ंक्शन के बाहर परिभाषित अन्य नाम-एक वैश्विक गुंजाइश है। जिसका अर्थ है कि एक बार घोषित किया गया, जो नाम वैश्विक दायरे में हैं, पूरे कार्यक्रम में सुलभ हैं।
  • चर राशि को ब्लॉक के दायरे में परिभाषित किया जाता है जो मुख्य कार्य का मुख्य भाग है। यह घोषणा के अपने बिंदु से और मुख्य समारोह के बाकी हिस्सों में पहुँचा जा सकता है। हालांकि, इसके बाहर नहीं। इसका मतलब है कि चर राशि में ब्लॉक स्कोप है
  • चर घाटी को "कथन के लिए" के दायरे में परिभाषित किया गया है। यह आसानी से उस कथन में उपयोग किया जा सकता है लेकिन मुख्य फ़ंक्शन में कहीं और नहीं। इसका स्थानीय दायरा है

नेस्टेड स्कोप

स्कोप में अन्य स्कोप हो सकते हैं। निहित (या नेस्टेड) ​​गुंजाइश को आंतरिक दायरे के रूप में संदर्भित किया जाता है। युक्त गुंजाइश बाहरी दायरा है।

#include using namespace std;// Program for illustration purposes only: It is bad style for a function// to use a global variable and also define a local variable with the same nameint reused = 42; // reused has global scopeint main(){int unique = 0; // unique has block scope// output #1: uses global reused; prints 42 0cout << reused << " " << unique << endl;int reused = 0; // new, local object named reused hides global reused// output #2: uses local reused; prints 0 0cout << reused << " " << unique << endl;// output #3: explicitly requests the global reused; prints 42 0cout << ::reused << " " << unique << endl;return 0;}

आउटपुट # 1 पुन: उपयोग की स्थानीय परिभाषा से पहले प्रकट होता है। इस प्रकार, यह उत्पादन

कथन वह है जो वैश्विक उपयोग में परिभाषित नाम का पुन: उपयोग करता है। यह कथन आउटपुट करता है

४२ ०

आउटपुट # 2 पुन: उपयोग की स्थानीय परिभाषा के बाद होता है। यह अब दायरे में है। इसलिए, यह दूसरा आउटपुट स्टेटमेंट केवल वैश्विक एक और आउटपुट के बजाय पुन: उपयोग की जाने वाली स्थानीय वस्तु का उपयोग करता है

० ०

आउटपुट # 3 स्कोप ऑपरेटर का उपयोग करके डिफ़ॉल्ट स्कूपिंग नियमों को ओवरराइड करता है। वैश्विक दायरे का कोई नाम नहीं है। इस प्रकार, जब गुंजाइश ऑपरेटर (: :) के पास एक खाली बाएं हाथ है। यह इसे वैश्विक दायरे के दाईं ओर नाम लाने के अनुरोध के रूप में व्याख्या करता है। इस प्रकार, अभिव्यक्ति वैश्विक पुन: उपयोग और आउटपुट का उपयोग करती है

४२ ०

परिवर्तनीय प्रकार रूपांतरण

एक प्रकार के एक चर को दूसरे में बदला जा सकता है। इसे "टाइप रूपांतरण" के रूप में जाना जाता है। आइए विभिन्न C ++ चर प्रकारों को परिवर्तित करने के नियम देखें:

गैर-बूल को बूल वैरिएबल में असाइन करना गलत है, यदि मान 0 है और अन्यथा सत्य है।

bool b = 42; // b is true

अन्य अंकगणित प्रकारों में से एक में एक बूल को सौंपना 1 अगर बूल सच्चा है और 0 अगर बूल झूठ है।

bool b = true;int i = b; // i has value 1

फ़्लोट-पॉइंट वैल्यू को int प्रकार के वेरिएबल पर असाइन करने से वह मान निकलता है जो छोटा होता है। संग्रहीत किया गया मान दशमलव बिंदु से पहले का हिस्सा है।

int i = 3.14; // i has value 3

फ्लोट प्रकार के एक चर के लिए एक इंट वैल्यू को असाइन करने से आंशिक भाग शून्य हो जाता है। पूर्णांक आमतौर पर खो जाता है अगर पूर्णांक में अधिक चर होते हैं तो अस्थायी चर समायोजित कर सकते हैं।

Int i=3;double pi = i; // pi has value 3.0

यदि हम किसी श्रेणी के मान को असंबद्ध प्रकार के वेरिएबल में निर्दिष्ट करने का प्रयास करते हैं, तो परिणाम मान% (मॉडुलो) का शेष है

उदाहरण के लिए, एक 8-बिट अहस्ताक्षरित चार प्रकार 255 के माध्यम से 0 से मानों को शामिल कर सकता है, समावेशी। इस सीमा के बाहर एक मान असाइन करने से कंपाइलर को उस मान modulo 256 के शेष को असाइन करना होगा। इसलिए, ऊपर दिए गए तर्क से, एक 8-बिट अहस्ताक्षरित चार को -1 का असाइनमेंट उस ऑब्जेक्ट को 255 मान देता है।

unsigned char c = -1; // assuming 8-bit chars, c has value 255

यदि हम हस्ताक्षरित प्रकार के ऑब्जेक्ट के लिए एक आउट-ऑफ-रेंज मान असाइन करने का प्रयास करते हैं, तो परिणाम अप्रत्याशित है। यह अपरिभाषित है। कार्यक्रम बाहर की तरफ काम करता हुआ दिखाई दे सकता है, या यह दुर्घटनाग्रस्त हो सकता है, या यह कचरा मान उत्पन्न कर सकता है।

signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefined

जब हम एक प्रकार के मूल्य का उपयोग करते हैं तो कंपाइलर उसी प्रकार के रूपांतरणों को लागू करता है, जहां दूसरे प्रकार के मूल्य की अपेक्षा की जाती है।

int i = 42;if (i) // condition will evaluate as truei = 0;

यदि यह मान = 0 है, तो स्थिति झूठी है; अन्य सभी (गैर-शून्य) मान सही निकलते हैं। इसी अवधारणा द्वारा, जब हम एक अंकगणितीय अभिव्यक्ति में एक बूल का उपयोग करते हैं, तो इसका मान हमेशा 0 या 1 में बदल जाता है। परिणामस्वरूप, अंकगणितीय अभिव्यक्ति में एक बूल का उपयोग करना आमतौर पर लगभग निश्चित रूप से गलत है।

सावधानी: साइन और अनसाइन्ड टाइप्स मिक्स न करें

हस्ताक्षरित और अहस्ताक्षरित होने वाली अभिव्यक्तियाँ हस्ताक्षरित मूल्य नकारात्मक होने पर आश्चर्यजनक और गलत परिणाम दे सकती हैं। जैसा कि ऊपर हस्ताक्षरित मूल्यों पर चर्चा स्वचालित रूप से अहस्ताक्षरित में बदल जाती है।

उदाहरण के लिए, जैसे अंकगणितीय अभिव्यक्ति में

x* y

यदि x -1 है और y 1 है, और यदि x और y दोनों अंतर हैं, तो मान अपेक्षित है, -1।

यदि x int और y अहस्ताक्षरित हैं, तो इस अभिव्यक्ति का मूल्य इस बात पर निर्भर करता है कि संकलन मशीन पर कितने बिट्स का पूर्णांक है। हमारी मशीन पर, यह अभिव्यक्ति 4294967295 है।

चर रजिस्टर

मेमोरी वेरिएबल की तुलना में रजिस्टर्स वैरिएबल एक्सेस करने में तेज हैं। इसलिए, चर जिन्हें अक्सर C ++ प्रोग्राम में उपयोग किया जाता है उन्हें रजिस्टर कीवर्ड का उपयोग करके रजिस्टरों में रखा जा सकता है । रजिस्टर कीवर्ड किसी संकलक को किसी रजिस्टर में स्टोर करने के लिए कंपाइलर को बताता है। यह कंपाइलर की पसंद है कि उसे रजिस्टर में रखना है या नहीं। आम तौर पर, कंपाइलर स्वयं विभिन्न अनुकूलन करते हैं जिसमें रजिस्टर में कुछ चर डालना शामिल होता है। C ++ प्रोग्राम में रजिस्टर चर की संख्या पर कोई सीमा नहीं है। लेकिन कंपाइलर चर को एक रजिस्टर में स्टोर नहीं कर सकता है। ऐसा इसलिए है क्योंकि रजिस्टर मेमोरी बहुत सीमित है और आमतौर पर ओएस द्वारा उपयोग की जाती है।

परिभाषित करना:

register int i;

टिप्पणियाँ

टिप्पणियाँ संकलक द्वारा अनदेखा किए गए कोड के भाग हैं। यह प्रोग्रामर को स्रोत कोड / प्रोग्राम के संबंधित क्षेत्रों में नोट्स बनाने की अनुमति देता है। टिप्पणियाँ या तो ब्लॉक रूप या एकल लाइनों में आती हैं। कार्यक्रम की टिप्पणियां व्याख्यात्मक कथन हैं। इसे C ++ कोड में शामिल किया जा सकता है जो किसी को भी अपने सोर्स कोड को पढ़ने में मदद करता है। सभी प्रोग्रामिंग भाषाएं किसी न किसी रूप में टिप्पणियों की अनुमति देती हैं। C ++ सिंगल-लाइन और मल्टी-लाइन दोनों टिप्पणियों का समर्थन करता है।

  • सिंगल-लाइन टिप्पणियां वे हैं जो // से शुरू होती हैं और लाइन के अंत तक जारी रहती हैं। यदि किसी टिप्पणी पंक्ति में अंतिम वर्ण a है तो टिप्पणी अगली पंक्ति में जारी रहेगी।
  • मल्टी-लाइन टिप्पणियां वे हैं जो / * से शुरू होती हैं और * / के साथ समाप्त होती हैं।
/* This is a comment *//* C++ comments can also* span multiple lines*/

बच अनुक्रम

कुछ वर्ण, जैसे बैकस्पेस और नियंत्रण वर्ण, कोई दृश्य छवि नहीं है। ऐसे पात्रों को गैर-मुद्रण योग्य वर्ण के रूप में जाना जाता है। अन्य वर्ण (एकल और दोहरे उद्धरण चिह्न, प्रश्न चिह्न और बैकस्लैश) का कई प्रोग्रामिंग भाषाओं में विशेष अर्थ है।

हमारे कार्यक्रम इनमें से किसी भी पात्र का सीधे उपयोग करने में सक्षम नहीं हैं। इसके बजाय, हम इस तरह के चार का प्रतिनिधित्व करने के लिए एक भागने के क्रम का उपयोग कर सकते हैं। एक भागने का क्रम बैकस्लैश के साथ शुरू होता है।

C ++ प्रोग्रामिंग भाषा कई एस्केप दृश्यों को परिभाषित करती है:

वह क्या करता है?

चरित्र

नई पंक्ति

\ n

लंबवत टैब

\ v

बैकस्लैश

\\

कैरिज रिटर्न

\ r

क्षैतिज टैब

\ t

बैकस्पेस

\ b

प्रश्न चिह्न

\ _?

भोजन की शैली

\ f

अलर्ट (घंटी)

\ए

दोहरे उद्धरण

\ "

एकल बोली

\ '

हम एक भागने के क्रम का उपयोग करते हैं जैसे कि यह एक एकल वर्ण था:

cout << '\n'; // prints a newlinecout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newline

हम एक या एक से अधिक हेक्साडेसिमल अंकों के बाद सामान्यीकृत एस्केप अनुक्रम \ x भी लिख सकते हैं। या हम एक, या दो, या तीन अष्टाधारी अंकों के बाद एक का उपयोग करते हैं। सामान्यीकृत एस्केप अनुक्रम वर्ण के संख्यात्मक मान का प्रतिनिधित्व करता है। कुछ उदाहरण (लैटिन -1 चार सेट मानते हुए):

\7 (bell) \12 (newline) \40 (blank)\0 (null) \115 ('M') \x4d ('M')

हम पूर्व-निर्धारित एस्केप अनुक्रमों का उपयोग कर सकते हैं, जैसा कि हम किसी अन्य वर्ण का उपयोग कर रहे हैं।

cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newlinecout << '\115' << '\n'; // prints M followed by a newline

सारांश

  • एक C ++ वैरिएबल हमें एक नामित भंडारण क्षमता प्रदान करता है।
  • सी ++ चर प्रकार: इंट, डबल, चार, फ्लोट, स्ट्रिंग, बूल, आदि।
  • निहित (या नेस्टेड) ​​स्कोप को आंतरिक स्कोप के रूप में संदर्भित किया जाता है, और इसमें समाहित स्कोप बाहरी स्कोप है।
  • एक प्रकार के एक चर को दूसरे में बदला जा सकता है। इसे "टाइप रूपांतरण" के रूप में जाना जाता है।
  • मेमोरी वेरिएबल की तुलना में रजिस्टर्स वैरिएबल एक्सेस करने में तेज हैं।
  • टिप्पणियाँ संकलक द्वारा अनदेखा किए गए कोड के भाग हैं।
  • कुछ वर्ण, जैसे बैकस्पेस और नियंत्रण वर्ण, कोई दृश्य छवि नहीं है।