logo

sizeof() operator i C

Det størrelse på () operator er almindeligt anvendt i C. Den bestemmer størrelsen af ​​udtrykket eller datatypen specificeret i antallet af char-størrelse lagerenheder. Det størrelse på () operatoren indeholder en enkelt operand, som enten kan være et udtryk eller en datatypecast, hvor castet er datatype indesluttet i parentes. Datatypen kan ikke kun være primitive datatyper såsom heltal eller flydende datatyper, men det kan også være pointerdatatyper og sammensatte datatyper såsom fagforeninger og strukturer.

Behov for sizeof() operator

Hovedsageligt kender programmer lagerstørrelsen af ​​de primitive datatyper. Selvom datatypens lagerstørrelse er konstant, varierer den, når den implementeres på forskellige platforme. For eksempel tildeler vi array-pladsen dynamisk ved at bruge størrelse på () operatør:

 int *ptr=malloc(10*sizeof(int)); 

I ovenstående eksempel bruger vi operatoren sizeof(), som anvendes på castet af typen int. Vi bruger malloc() funktion til at allokere hukommelsen og returnerer den markør, der peger på denne allokerede hukommelse. Hukommelsespladsen er lig med antallet af bytes optaget af int-datatypen og ganget med 10.

Bemærk:
Outputtet kan variere på forskellige maskiner, såsom på 32-bit operativsystem vil vise forskelligt output, og 64-bit operativsystem vil vise de forskellige output af de samme datatyper.

Det størrelse på () operatøren opfører sig forskelligt afhængigt af typen af ​​operanden.

    Operand er en datatype Operand er et udtryk

Når operand er en datatype.

 #include int main() { int x=89; // variable declaration. printf('size of the variable x is %d', sizeof(x)); // Displaying the size of ?x? variable. printf('
size of the integer data type is %d',sizeof(int)); //Displaying the size of integer data type. printf('
size of the character data type is %d',sizeof(char)); //Displaying the size of character data type. printf('
size of the floating data type is %d',sizeof(float)); //Displaying the size of floating data type. return 0; } 

I ovenstående kode udskriver vi størrelsen af ​​forskellige datatyper såsom int, char, float ved hjælp af størrelse på () operatør.

Produktion

sizeof() operator i C

Når operand er et udtryk

 #include int main() { double i=78.0; //variable initialization. float j=6.78; //variable initialization. printf('size of (i+j) expression is : %d',sizeof(i+j)); //Displaying the size of the expression (i+j). return 0; } 

I ovenstående kode har vi lavet to variable 'i' og 'j' af typen henholdsvis double og float, og så udskriver vi størrelsen på udtrykket ved at bruge størrelse på(i+j) operatør.

Produktion

 size of (i+j) expression is : 8 

Håndtering af arrays og strukturer

Det sizeof() operator er yderst nyttig, når du arbejder med arrays og strukturer ud over de ovennævnte brugssager. Sammenhængende blokke hukommelse er kendt som arrays , og at forstå deres størrelse er afgørende for nogle få opgaver.

np.hvor

For eksempel:

 #include int main() { int arr[] = {1, 2, 3, 4, 5}; int arrSize = sizeof(arr) / sizeof(arr[0]); printf('Size of the array arr is: %d
', sizeof(arr)); printf('Number of elements in arr is: %d
', arrSize); return 0; } 

Produktion

 Size of the array arr is: 20 Number of elements in arr is: 5 

Sizeof(arr) returnerer arrayets samlede størrelse i bytes, hvorimod sizeof(arr[0]) returnerer arrayets mindste elements størrelse. Antallet af elementer i arrayet bestemmes ved at dividere den samlede størrelse med størrelsen af ​​a enkelt element (arrSize) . Ved at bruge denne teknik vil koden fortsat være det fleksibel i lyset af skiftende arraystørrelser.

manuel test

På samme måde kan du bruge sizeof() operator for at finde ud af størrelsen af ​​strukturer:

 #include struct Person { char name[30]; int age; float salary; }; int main() { struct Person p; printf('Size of the structure Person is: %d bytes
', sizeof(p)); return 0; } 

Produktion

 Size of the structure Person is: 40 bytes 

Tildeling af dynamisk hukommelse og pointer-aritmetik

Andre anvendelser af sizeof() operator omfatte pointer aritmetik og dynamisk hukommelsesallokering . At kende størrelsen af ​​datatyper bliver afgørende, når man arbejder med arrays og pointer for korrekt hukommelsesallokering og elementadgang.

 #include #include int main() { int *ptr; int numElements = 5; ptr = (int*)malloc(numElements * sizeof(int)); if (ptr == NULL) { printf('Memory allocation failed!
&apos;); return 1; } for (int i = 0; i <numelements; i++) { ptr[i]="i" + 1; } printf('dynamic array elements: '); for (int i="0;" < numelements; printf('%d ', ptr[i]); free(ptr); release allocated memory. return 0; pre> <p> <strong>Output</strong> </p> <pre> Dynamic array elements: 1 2 3 4 5 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, a size <strong> <em>numElements integer</em> </strong> array has a memory that is dynamically allocated. <strong> <em>numElements * sizeof(int)</em> </strong> bytes represent the total amount of memory allocated. By doing this, the array is guaranteed to have enough room to accommodate the desired amount of integers.</p> <h2>Sizeof() for Unions</h2> <p> <strong> <em>Unions</em> </strong> and the <strong> <em>sizeof() operator</em> </strong> are compatible. <strong> <em>Unions</em> </strong> are comparable to <strong> <em>structures,</em> </strong> except only one member can be active at once, and all its members share memory.</p> <pre> #include union Data { int i; float f; char str[20]; }; int main() { union Data data; printf(&apos;Size of the union Data is: %d bytes
&apos;, sizeof(data)); return 0; } </pre> <p> <strong>Output</strong> </p> <pre> Size of the union Data is: 20 bytes </pre> <p>The <strong> <em>sizeof() operator</em> </strong> is extremely important since it&apos;s essential for <strong> <em>memory management</em> </strong> , <strong> <em>portability</em> </strong> , and <strong> <em>effective data handling</em> </strong> . The <strong> <em>sizeof() operator</em> </strong> is crucial in C for the reasons listed in the list below:</p> <p> <strong>Memory Allocation:</strong> When working with <strong> <em>arrays</em> </strong> and <strong> <em>dynamic memory allocation</em> </strong> , the <strong> <em>sizeof() operator</em> </strong> is frequently used in memory allocation. Knowing the size of <strong> <em>data types</em> </strong> when allocating memory for arrays or structures guarantees that the correct amount of memory is reserved, reducing <strong> <em>memory overflows</em> </strong> and improving memory utilization.</p> <p> <strong>Portability:</strong> Since C is a <strong> <em>popular programming language</em> </strong> , code frequently has to operate on several systems with differing architectures and <strong> <em>data type sizes</em> </strong> . As it specifies the size of data types at compile-time, the <strong> <em>sizeof() operator</em> </strong> aids in designing portable code by enabling programs to adapt automatically to various platforms.</p> <p> <strong>Pointer Arithmetic:</strong> When dealing with pointers, the <strong> <em>sizeof() operator</em> </strong> aids in figuring out <strong> <em>memory offsets</em> </strong> , allowing accurate movement within <strong> <em>data structures, arrays</em> </strong> , and other memory regions. It is extremely helpful when iterating across arrays or dynamically allocated memory.</p> <p> <strong>Handling Binary Data:</strong> The <strong> <em>sizeof() operator</em> </strong> guarantees that the right amount of data is read or written when working with binary data or files, eliminating mistakes brought on by inaccurate data size assumptions.</p> <p> <strong>Unions and Structures:</strong> The <strong> <em>sizeof() operator</em> </strong> is essential when managing <strong> <em>structures</em> </strong> and <strong> <em>unions</em> </strong> , especially when utilizing them to build complicated data structures. <strong> <em>Memory allocation</em> </strong> and access become effective and error-free when you are aware of the size of structures and unions.</p> <p> <strong>Safe Buffer Management:</strong> The <strong> <em>sizeof() operator</em> </strong> helps make sure that the buffer is big enough to hold the data being processed while working with character <strong> <em>arrays (strings)</em> </strong> , preventing <strong> <em>buffer overflows</em> </strong> and <strong> <em>potential security flaws</em> </strong> .</p> <p> <strong>Data Serialization and Deserialization:</strong> The <strong> <em>sizeof() operator</em> </strong> guarantees that the right amount of data is handled, maintaining <strong> <em>data integrity</em> </strong> throughout <strong> <em>data transfer</em> </strong> or storage, in situations where data needs to be serialized (converted to a byte stream) or deserialized (retrieved from a byte stream).</p> <p> <strong>Code Improvement:</strong> Knowing the size of various data formats might occasionally aid in <strong> <em>code optimization</em> </strong> . For instance, it enables the compiler to more effectively align data structures, reducing memory waste and enhancing cache performance.</p> <h2>Sizeof() Operator Requirement in C</h2> <p>The <strong> <em>sizeof() operator</em> </strong> is a key component in C programming due to its need in different elements of memory management and data processing. Understanding <strong> <em>data type</em> </strong> sizes is essential for <strong> <em>effectively allocating memory</em> </strong> , especially when working with arrays and dynamic memory allocation. By ensuring that the appropriate amount of memory is reserved, this information helps to avoid memory overflows and optimize memory use. The <strong> <em>sizeof() operator</em> </strong> is also essential for creating <strong> <em>portable code</em> </strong> , which may execute without <strong> <em>error</em> </strong> on several systems with differing architectures and data type sizes.</p> <p>The program can adapt to many platforms without the need for manual modifications since it supplies the size of data types at compile-time. Additionally, the <strong> <em>sizeof() operator</em> </strong> makes it possible to navigate precisely around data structures and arrays while working with pointers, facilitating safe and effective pointer arithmetic. Another application for the <strong> <em>sizeof() operator</em> </strong> is handling <strong> <em>unions</em> </strong> and <strong> <em>structures</em> </strong> . It ensures precise memory allocation and access within intricate <strong> <em>data structures</em> </strong> , preventing mistakes and inefficiencies. The <strong> <em>sizeof() operator</em> </strong> is a basic tool that enables C programmers to develop effective, portable, and resilient code while optimizing performance and data integrity. It ensures <strong> <em>safe buffer management</em> </strong> and makes data serialization and deserialization easier.</p> <h2>Conclusion:</h2> <p>In summary, the <strong> <em>C sizeof() operator</em> </strong> is a useful tool for calculating the size of many sorts of objects, including <strong> <em>data types, expressions, arrays, structures, unions</em> </strong> , and more. As it offers the size of data types at compile-time, catering to multiple platforms and settings, it enables programmers to create portable and flexible code. Developers may effectively handle <strong> <em>memory allocation, pointer arithmetic</em></strong>  , and <strong> <em>dynamic memory allocation</em> </strong> in their programs by being aware of the storage needs of various data types.</p> <p>When working with <strong> <em>arrays</em> </strong> and <strong> <em>structures</em> </strong> , the <strong> <em>sizeof() operator</em> </strong> is very helpful since it ensures proper <strong> <em>memory allocation</em> </strong> and makes it simple to retrieve elements. Additionally, it facilitates <strong> <em>pointer arithmetic</em> </strong> , making it simpler to move between memory regions. However, because of operator precedence, programmers should be cautious when utilizing complicated expressions with <strong> <em>sizeof() operator</em> </strong> .</p> <p>Overall, learning the <strong> <em>sizeof() operator</em> </strong> equips C programmers to create stable and adaptable software solutions by enabling them to write efficient, dependable, and platform-independent code.</p> <hr></numelements;>

Forklaring:

I dette eksempel er en størrelse numElements heltal array har en hukommelse, der er dynamisk allokeret. numElements * sizeof(int) bytes repræsenterer den samlede mængde hukommelse, der er allokeret. Ved at gøre dette er arrayet garanteret at have plads nok til at rumme den ønskede mængde heltal.

Sizeof() for fagforeninger

Fagforeninger og sizeof() operator er kompatible. Fagforeninger er sammenlignelige med strukturer, bortset fra, at kun ét medlem kan være aktivt på én gang, og alle dets medlemmer deler hukommelse.

 #include union Data { int i; float f; char str[20]; }; int main() { union Data data; printf(&apos;Size of the union Data is: %d bytes
&apos;, sizeof(data)); return 0; } 

Produktion

 Size of the union Data is: 20 bytes 

Det sizeof() operator er ekstremt vigtigt, da det er vigtigt for hukommelseshåndtering , bærbarhed , og effektiv datahåndtering . Det sizeof() operator er afgørende i C af de grunde, der er anført i listen nedenfor:

Hukommelsestildeling: Når man arbejder med arrays og dynamisk hukommelsesallokering , det sizeof() operator bruges ofte i hukommelsestildeling. At kende størrelsen på datatyper når der allokeres hukommelse til arrays eller strukturer, garanteres, at den korrekte mængde hukommelse er reserveret, hvilket reducerer hukommelsen flyder over og forbedring af hukommelsesudnyttelsen.

Portabilitet: Da C er en populært programmeringssprog , skal kode ofte fungere på flere systemer med forskellige arkitekturer og datatypestørrelser . Da det specificerer størrelsen af ​​datatyper på kompileringstidspunktet, sizeof() operator hjælper med at designe bærbar kode ved at gøre det muligt for programmer at tilpasse sig automatisk til forskellige platforme.

Pointer aritmetik: Når man beskæftiger sig med pointere, er sizeof() operator hjælper med at finde ud af hukommelsesforskydninger , hvilket tillader nøjagtig bevægelse indeni datastrukturer, arrays og andre hukommelsesområder. Det er yderst nyttigt, når du itererer på tværs af arrays eller dynamisk allokeret hukommelse.

Håndtering af binære data: Det sizeof() operator garanterer, at den rigtige mængde data læses eller skrives, når der arbejdes med binære data eller filer, hvilket eliminerer fejl forårsaget af unøjagtige datastørrelsesantagelser.

Fagforeninger og strukturer: Det sizeof() operator er afgørende, når man skal styre strukturer og fagforeninger , især når du bruger dem til at bygge komplicerede datastrukturer. Hukommelsestildeling og adgang bliver effektiv og fejlfri, når man er opmærksom på størrelsen af ​​strukturer og fagforeninger.

Sikker bufferstyring: Det sizeof() operator hjælper med at sikre, at bufferen er stor nok til at holde de data, der behandles, mens der arbejdes med karakter arrays (strenge) , forebyggelse buffer overløb og potentielle sikkerhedsbrister .

Dataserialisering og deserialisering: Det sizeof() operator garanterer, at den rigtige mængde data håndteres, vedligeholdes dataintegritet hele vejen igennem dataoverførsel eller lagring, i situationer, hvor data skal serialiseres (konverteres til en bytestrøm) eller deserialiseres (hentes fra en bytestrøm).

Kodeforbedring: At kende størrelsen af ​​forskellige dataformater kan lejlighedsvis hjælpe kode optimering . For eksempel gør det compileren i stand til mere effektivt at justere datastrukturer, hvilket reducerer hukommelsesspild og forbedrer cache-ydeevnen.

Sizeof() Operatørkrav i C

Det sizeof() operator er en nøglekomponent i C-programmering på grund af dets behov for forskellige elementer af hukommelsesstyring og databehandling. Forståelse datatype størrelser er afgørende for effektiv allokering af hukommelse , især når du arbejder med arrays og dynamisk hukommelsesallokering. Ved at sikre, at den passende mængde hukommelse er reserveret, hjælper disse oplysninger med at undgå hukommelsesoverløb og optimere hukommelsesbrugen. Det sizeof() operator er også afgørende for at skabe bærbar kode , som kan udføres uden fejl på flere systemer med forskellige arkitekturer og datatypestørrelser.

Programmet kan tilpasses til mange platforme uden behov for manuelle ændringer, da det leverer størrelsen af ​​datatyper på kompileringstidspunktet. Derudover sizeof() operator gør det muligt at navigere præcist rundt i datastrukturer og arrays, mens der arbejdes med pointere, hvilket letter sikker og effektiv pointer-aritmetik. En anden ansøgning til sizeof() operator håndterer fagforeninger og strukturer . Det sikrer præcis hukommelsesallokering og adgang inden for indviklet datastrukturer , forebyggelse af fejl og ineffektivitet. Det sizeof() operator er et grundlæggende værktøj, der gør det muligt for C-programmører at udvikle effektiv, bærbar og modstandsdygtig kode, mens de optimerer ydeevne og dataintegritet. Det sikrer sikker bufferhåndtering og gør dataserialisering og deserialisering lettere.

Konklusion:

Sammenfattende er C sizeof() operator er et nyttigt værktøj til at beregne størrelsen af ​​mange slags objekter, herunder datatyper, udtryk, arrays, strukturer, fagforeninger , og mere. Da det tilbyder størrelsen af ​​datatyper på kompileringstidspunktet, der passer til flere platforme og indstillinger, gør det programmører i stand til at skabe bærbar og fleksibel kode. Udviklere kan effektivt håndtere hukommelsestildeling, pointer-aritmetik , og dynamisk hukommelsesallokering i deres programmer ved at være opmærksomme på lagringsbehovet for forskellige datatyper.

Når man arbejder med arrays og strukturer , det sizeof() operator er meget nyttigt, da det sikrer korrekt hukommelsestildeling og gør det nemt at hente elementer. Derudover letter det pointer aritmetik , hvilket gør det nemmere at flytte mellem hukommelsesområder. Men på grund af operatørernes forrang bør programmører være forsigtige, når de bruger komplicerede udtryk med sizeof() operator .

hvad er map java

Samlet set lære sizeof() operator udstyrer C-programmører til at skabe stabile og tilpasningsdygtige softwareløsninger ved at sætte dem i stand til at skrive effektiv, pålidelig og platformsuafhængig kode.