Wednesday 16 October 2013

Sizeof Operator in C

C आणी C++ या languages मध्ये Data type चा size काढण्यासाठी या ऑपरेटरचा उपयोग करतात. उदा.
॑#include<stdio.h>
int main()
{

         int a;
         float b;
         char ch;
         printf("%d...%d...%d\n",sizeof(int), sizeof(float), sizeof(char));
         printf("%d...%d...%d\n",sizeof(a), sizeof(b), sizeof(ch));
}

sizeof operator

हा प्रोग्रॅम कंपाइल आणी रन केला तर आउटपुट २, ४, आणी १ अथवा ४, ४, १ अथवा ज्या कंपायलरवर तुम्ही प्रोग्रॅम रन करता त्यावर int, float, char ला लागणाऱ्या number of bytes ची संख्या तो सांगेल. गंमत म्हणजे याचा वापर करतांना ज्या पद्धतीने तो वापरावा लागतो त्याला बघून आपल्याला ते फंक्शन वाटते व तसा गैरसमज सुद्धा होतो. पण ते फंक्शन नसून ऑपरेटर आहे. अर्थात असा प्रश्न तुम्हाला विचारला गेला तर यासाठी सबळ कारणे द्यावी लागतील...तर मग का तो ऑपरेटर आहे...?
१. फंक्शन ला address असतो पण operator ला address नसतो
२. Operand of sizeof can be bare cast...i.e. sizeof(int) can be written. In case of function you have to write argument as constant or variable)
३. sizeof च्या पुढे round bracket टाकला नाही तरी चालतो. म्हणजेच वरील प्रोग्रॅम मध्ये दुसऱ्या printf स्टेटमेंट मध्ये sizeof(a) च्या ऐवजी sizeof a असे लिहीले तरी चालते. फंक्शन च्या बाबतीत round brackets टाकावेच लागतात.
४. sizeof हा run time ला execute होत नाही. So expression like sizeof(a++) will not modify value of variable a
५. sizeof या expression round brackets मध्ये void व्यतीरीक्त कोणताही operand असू शकतो. फंक्शनच्या बाबतीत मात्र void सुद्धा असू शकतो.

Dynamic Memory allocate करतांना malloc, calloc आणी realloc या library फंक्शनचा वापर केला जातो.
उदा. आपल्याला heap वरून 1 integer, 1 float आणी 1 character साठी मेमरी हवी आहे. तर आपल्याला प्रोग्रॅम असा लिहावा लागेल...
void main()
{

       int* x;
       char* y;
       float* z;
       x = (int*) malloc(sizeof(int));
       y = (char*) malloc(sizeof(char));
       z = (float*) malloc(sizeof(float));
}
या मध्ये sizeof(int), sizeof(char), sizeof(float) च्या ऐवजी 2, 1, 4 असे लिहून चालणार नाही काय असा प्रश्न Beginner C programmer ना पडतो. असं चालत पण cross plat form programming करतांना दुसऱ्या मशीन वर int ला 4 byte लागत असतील तर तुमचा प्रोग्रॅम काम करणार नाही.
दुसरे कारण म्हणजे समजा एखादे स्ट्रक्चर डिक्लेअर केले आहे व त्या मध्ये अनके डेटा मेंबर्स आहेत आणी स्ट्रक्चर च्या व्हेअरेबल साठी मेमरी heap वरून घ्यायची आहे. तर मग sizeof operator वापरून तुम्हाला तुमची जबाबदारी कंपायलरवर झटकून टाकता येते.
फक्त जबाबदारीचा प्रश्न नसून स्ट्रक्चर साठी लागणाऱ्या मेमरीचे calculation करण्याची कंपायलरची पद्धत ही manual पद्धतीपेक्षा वेगळी असू शकते कारण मेमरी पॅडींग करण्यासाठी त्याला काही व्यवस्था करावी लागते.

If you want to learn C programming language in Marathi visit our web site 

http://www.cmarathionline.com/history-of-c-language/

No comments:

Post a Comment

Do you like the C Marathi e-learning concept?