What is sizeof() operator in C++ Language
सी ++ में sizeof() ऑपरेटर
What is sizeof() operator in C++ Language
sizeof() एक ऑपरेटर है जो डेटा प्रकार, स्थिरांक, चर के आकार का मूल्यांकन करता है। यह एक कंपाइल-टाइम ऑपरेटर है क्योंकि यह कंपाइलेशन के समय किसी भी वेरिएबल या स्थिरांक का आकार लौटाता है।
आकार, जिसकी गणना आकार () ऑपरेटर द्वारा की जाती है, कंप्यूटर में व्याप्त RAM की मात्रा है।
sizeof() ऑपरेटर का सिंटैक्स नीचे दिया गया है:
sizeof(data_type);
उपरोक्त सिंटैक्स में, data_type डेटा का डेटा प्रकार, चर, स्थिरांक, यूनियन, संरचना या कोई अन्य उपयोगकर्ता-परिभाषित डेटा प्रकार हो सकता है।
sizeof () ऑपरेटर को निम्नलिखित ऑपरेंड प्रकारों पर लागू किया जा सकता है:
जब एक ऑपरेंड डेटा प्रकार का होता है
यदि एक आकार () ऑपरेटर के पैरामीटर में एक चर का डेटा प्रकार होता है, तो आकार () ऑपरेटर डेटा प्रकार का आकार वापस कर देगा।
आइए इस परिदृश्य को एक उदाहरण के माध्यम से समझते हैं।
#include <iostream>
using namespace std;
int main()
{
// Determining the space in bytes occupied by each data type.
std::cout << "Size of integer data type : " <<sizeof(int)<< std::endl;
std::cout << "Size of float data type : " <<sizeof(float)<< std::endl;
std::cout << "Size of double data type : " <<sizeof(double)<< std::endl;
std::cout << "Size of char data type : " <<sizeof(char)<< std::endl;
return 0;
}
उपरोक्त प्रोग्राम में, हमने sizeof() ऑपरेटर का उपयोग करके इन-बिल्ट डेटा प्रकारों के आकार का मूल्यांकन किया है। जैसा कि हम जानते हैं कि int 4 बाइट्स पर कब्जा करता है, फ्लोट 4 बाइट्स पर कब्जा करता है, डबल 8 बाइट्स पर कब्जा करता है, और char 1 बाइट पर कब्जा करता है, और वही परिणाम sizeof() ऑपरेटर द्वारा दिखाया जाता है जैसा कि हम निम्नलिखित आउटपुट में देख सकते हैं।
Output:-
जब एक ऑपरेंड क्लास प्रकार का होता है।
#include <iostream>
using namespace std;
class Base
{
int a;
};
int main()
{
Base b;
std::cout << "Size of class base is : "<<sizeof(b) << std::endl;
return 0;
}
उपरोक्त कार्यक्रम में, हमने उस वर्ग के आकार का मूल्यांकन किया है, जिसमें एक पूर्णांक चर है। आउटपुट 4 बाइट्स होगा क्योंकि int वेरिएबल 4 बाइट्स पर कब्जा करता है।
Output:-
यदि हम एक वर्ग में एक और पूर्णांक चर जोड़ते हैं, तो कोड इस तरह दिखेगा:
#include <iostream>
using namespace std;
class Base
{
int a;
int d;
};
int main()
{
Base b;
std::cout << "Size of class base is : "<<sizeof(b) << std::endl;
return 0;
}
उपरोक्त कोड में, हमने एक और पूर्णांक चर जोड़ा है। इस स्थिति में, वर्ग का आकार 8 बाइट्स होगा क्योंकि int चर 4 बाइट्स पर कब्जा कर लेता है, इसलिए दो पूर्णांक चर 8 बाइट्स पर कब्जा कर लेते हैं।
Output:-
यदि हम उपरोक्त कोड में एक चर चर जोड़ते हैं, तो कोड इस तरह दिखेगा:
#include <iostream>
using namespace std;
class Base
{
int a;
int d;
char ch;
};
int main()
{
Base b;
std::cout << "Size of class base is : "<<sizeof(b) << std::endl;
return 0;
}
उपरोक्त कोड में, वर्ग में दो पूर्णांक चर और एक चर चर है। हमारी गणना के अनुसार, वर्ग का आकार 9 बाइट्स (int+int+char) के बराबर होगा, लेकिन संरचना पैडिंग की अवधारणा के कारण यह गलत है।
Output:-
जब एक ऑपरेंड सरणी प्रकार का होता है।
#include <iostream>
using namespace std;
int main()
{
int arr[]={10,20,30,40,50};
std::cout << "Size of the array 'arr' is : "<<sizeof(arr) << std::endl;
return 0;
}
उपरोक्त कार्यक्रम में, हमने पूर्णांक प्रकार की एक सरणी घोषित की है जिसमें पाँच तत्व शामिल हैं। हमने sizeof() ऑपरेटर का उपयोग करके सरणी के आकार का मूल्यांकन किया है। हमारी गणना के अनुसार, सरणी का आकार 20 बाइट्स होना चाहिए क्योंकि int डेटा प्रकार में 4 बाइट्स होते हैं, और सरणी में 5 तत्व होते हैं, इसलिए इस सरणी द्वारा कब्जा की गई कुल मेमोरी स्पेस 5*4 = 20 बाइट्स होती है। वही परिणाम sizeof() ऑपरेटर द्वारा दिखाया गया है जैसा कि हम निम्नलिखित आउटपुट में देख सकते हैं।
Output:-
आइए एक सरणी के दूसरे परिदृश्य पर विचार करें।
#include <iostream>
using namespace std;
void fun(int arr[])
{
std::cout << "Size of array is : " <<sizeof(arr)<< std::endl;
}
int main()
{
int arr[]={10,20,30,40,50};
fun(arr);
return 0;
}
उपरोक्त प्रोग्राम में, हमने फंक्शन का उपयोग करके ऐरे के आकार को प्रिंट करने का प्रयास किया है। इस स्थिति में, हमने पूर्णांक प्रकार की एक सरणी बनाई है, और हम फ़ंक्शन fun() में 'arr' पास करते हैं। मज़ा () 64-बिट ऑपरेटिंग सिस्टम में पूर्णांक सूचक का आकार लौटाएगा, अर्थात, int *, और int * का आकार 8 बाइट्स है।
Output:-
#include <iostream>
using namespace std;
int main()
{
int *ptr1=new int(10);
std::cout << "size of ptr1 : " <<sizeof(ptr1)<< std::endl;
std::cout << "size of *ptr1 : " <<sizeof(*ptr1)<< std::endl;
char *ptr2=new char('a');
std::cout <<"size of ptr2 : " <<sizeof(ptr2)<< std::endl;
std::cout <<"size of *ptr2 : "<<sizeof(*ptr2)<< std::endl;
double *ptr3=new double(12.78);
std::cout <<"size of ptr3 : " <<sizeof(ptr3)<< std::endl;
std::cout <<"size of *ptr3 : "<<sizeof(*ptr3)<< std::endl;
return 0;
}
उपरोक्त प्रोग्राम में, हमने पॉइंटर्स का आकार निर्धारित किया है। सभी प्रकार के डेटा के लिए पॉइंटर्स का आकार समान रहेगा। यदि कंप्यूटर में 32 बिट ऑपरेटिंग सिस्टम है, तो पॉइंटर का आकार 4 बाइट होगा। यदि कंप्यूटर में 64-बिट ऑपरेटिंग सिस्टम है, तो पॉइंटर का आकार 8 बाइट होगा। मैं इस प्रोग्राम को 64-बिट पर चला रहा हूं, इसलिए आउटपुट 8 बाइट्स होगा। अब, यदि हम पॉइंटर को '*' प्रतीक प्रदान करते हैं, तो आउटपुट डेटा प्रकार पर निर्भर करता है, उदाहरण के लिए, *ptr1 पूर्णांक प्रकार का है जिसका अर्थ है कि sizeof() ऑपरेटर 4 बाइट्स लौटाएगा क्योंकि int डेटा प्रकार 4 बाइट्स पर कब्जा करता है।
Output:-
जब एक ऑपरेंड एक अभिव्यक्ति है।
#include <iostream>
using namespace std;
int main()
{
int num1;
double num2;
cout << sizeof(num1+num2);
return 0;
}
उपरोक्त कार्यक्रम में, हमने क्रमशः int और double प्रकार के दो चर num1 और num2 घोषित किए हैं। इंट का आकार 4 बाइट्स है, जबकि डबल का आकार 8 बाइट्स है। परिणाम चर होगा, जो 8 बाइट्स पर डबल प्रकार का है।