logo

operatorius sizeof() C

The dydis() operatorius dažniausiai naudojamas C. Jis nustato išraiškos dydį arba duomenų tipą, nurodytą simbolio dydžio atminties vienetų skaičiuje. The dydis() operatoriuje yra vienas operandas, kuris gali būti arba išraiška, arba duomenų tipas, kai perdavimo tipas yra skliausteliuose. Duomenų tipas gali būti ne tik primityvūs duomenų tipai, pvz., sveikųjų arba slankiųjų duomenų tipai, bet ir rodyklės duomenų tipai bei sudėtiniai duomenų tipai, pvz., sąjungos ir struktūros.

Operatoriaus sizeof() poreikis

Iš esmės programos žino primityvių duomenų tipų saugojimo dydį. Nors duomenų tipo saugojimo dydis yra pastovus, jis skiriasi, kai naudojamas įvairiose platformose. Pavyzdžiui, mes dinamiškai paskirstome masyvo erdvę naudodami dydis() operatorius:

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

Aukščiau pateiktame pavyzdyje naudojame operatorių sizeof(), kuris taikomas int tipo atidavimui. Mes naudojame malloc () funkcija paskirstyti atmintį ir grąžina žymeklį, nukreipiantį į šią paskirtą atmintį. Atminties vieta yra lygi baitų, kuriuos užima int duomenų tipas, skaičiui, padaugintam iš 10.

Pastaba:
Skirtinguose įrenginiuose išvestis gali skirtis, pvz., 32 bitų operacinė sistema rodys skirtingą išvestį, o 64 bitų operacinė sistema rodys skirtingus tų pačių duomenų tipų išvestis.

The dydis() operatorius elgiasi skirtingai, priklausomai nuo operando tipo.

    Operandas yra duomenų tipas Operandas yra išraiška

Kai operandas yra duomenų tipas.

 #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; } 

Aukščiau pateiktame kode spausdiname skirtingų duomenų tipų, tokių kaip int, char, float, dydį, naudodami dydis() operatorius.

Išvestis

operatorius sizeof() C

Kai operandas yra išraiška

 #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; } 

Aukščiau pateiktame kode sukūrėme du kintamuosius „i“ ir „j“, atitinkamai „double“ ir „float“, tada spausdiname išraiškos dydį naudodami dydis(i+j) operatorius.

Išvestis

 size of (i+j) expression is : 8 

Masyvų ir struktūrų tvarkymas

The dydis() operatorius yra labai naudinga dirbant su masyvais ir struktūromis be pirmiau minėtų naudojimo atvejų. Gretimi blokai atminties yra žinomos kaip masyvai , o suprasti jų dydį yra labai svarbu atliekant keletą užduočių.

sql sąlygos

Pavyzdžiui:

 #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; } 

Išvestis

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

Sizeof(arr) grąžina bendras masyvo dydis baitais, tuo tarpu dydis(arr[0]) grąžina mažiausio masyvo elemento dydį. Elementų skaičius masyve nustatomas padalijus bendrą dydį iš a dydžio vienas elementas (arrSize) . Naudojant šią techniką, kodas ir toliau bus lankstus keičiantis masyvo dydžiams.

sąrašo pavyzdys java

Panašiai galite naudoti dydis() operatorius Norėdami sužinoti konstrukcijų dydį:

 #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; } 

Išvestis

 Size of the structure Person is: 40 bytes 

Dinaminės atminties paskirstymas ir rodyklės aritmetika

Kitos programos dydis() operatorius įtraukti rodyklės aritmetika ir dinaminis atminties paskirstymas . Dirbant su duomenų tipais svarbu žinoti duomenų tipų dydį masyvai ir rodyklės teisingam atminties paskirstymui ir prieigai prie elementų.

 #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;>

Paaiškinimas:

Šiame pavyzdyje dydis skaičiaiElements sveikasis skaičius masyvas turi atmintį, kuri yra dinamiškai paskirstyta. numElements * sizeof(int) baitai reiškia bendrą skirtos atminties kiekį. Tai padarius, masyve garantuojama pakankamai vietos, kad tilptų norimas sveikųjų skaičių kiekis.

Sizeof() sąjungoms

sąjungos ir dydis() operatorius yra suderinami. sąjungos yra palyginami su struktūros, tik vienas narys gali būti aktyvus vienu metu ir visi jo nariai dalijasi atmintimi.

 #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; } 

Išvestis

 Size of the union Data is: 20 bytes 

The dydis() operatorius yra labai svarbus, nes jis būtinas atminties valdymas , perkeliamumas , ir efektyvus duomenų tvarkymas . The dydis() operatorius yra labai svarbus C dėl toliau pateiktame sąraše išvardytų priežasčių:

Atminties paskirstymas: Dirbant su masyvai ir dinaminis atminties paskirstymas , dydis() operatorius dažnai naudojamas paskirstant atmintį. Žinant dydį duomenų tipai paskirstant atmintį masyvams ar struktūroms garantuoja, kad bus rezervuotas tinkamas atminties kiekis, sumažinant atmintis persipildo ir pagerinti atminties panaudojimą.

Perkeliamumas: Kadangi C yra a populiari programavimo kalba , kodas dažnai turi veikti keliose sistemose su skirtinga architektūra ir duomenų tipų dydžiai . Kadangi jis nurodo duomenų tipų dydį kompiliavimo metu, dydis() operatorius padeda kurti nešiojamąjį kodą, leidžiant programoms automatiškai prisitaikyti prie įvairių platformų.

Rodyklės aritmetika: Kai dirbate su rodyklėmis, dydis() operatorius padeda išsiaiškinti atminties poslinkiai leidžia tiksliai judėti viduje duomenų struktūros, masyvai , ir kitose atminties srityse. Tai labai naudinga kartojant masyvus arba dinamiškai paskirstytą atmintį.

Dvejetainių duomenų tvarkymas: The dydis() operatorius garantuoja, kad dirbant su dvejetainiais duomenimis ar failais yra nuskaitomas arba įrašomas tinkamas duomenų kiekis, pašalinant klaidas, atsirandančias dėl netikslių duomenų dydžio prielaidų.

linkedlist ir arraylist

Sąjungos ir struktūros: The dydis() operatorius yra būtinas valdant struktūros ir sąjungos , ypač naudojant juos sudėtingoms duomenų struktūroms kurti. Atminties paskirstymas ir prieiga tampa efektyvi ir be klaidų, kai žinote apie struktūrų ir sąjungų dydį.

Saugus buferio valdymas: The dydis() operatorius padeda įsitikinti, kad buferis yra pakankamai didelis, kad būtų galima laikyti apdorojamus duomenis dirbant su simboliu masyvai (stygos) , užkirsti kelią buferio perpildymas ir galimi saugumo trūkumai .

Duomenų serializavimas ir serializavimas: The dydis() operatorius garantuoja, kad bus tvarkomas tinkamas duomenų kiekis, išsaugant duomenų vientisumą visame duomenų perdavimas arba saugykla, tais atvejais, kai duomenis reikia nuoseklizuoti (konvertuoti į baitų srautą) arba deserializuoti (nuskaityti iš baitų srauto).

Kodo tobulinimas: Žinojimas apie įvairių duomenų formatų dydį kartais gali padėti kodo optimizavimas . Pavyzdžiui, tai leidžia kompiliatoriui efektyviau suderinti duomenų struktūras, sumažinant atminties švaistymą ir pagerinant talpyklos našumą.

Sizeof() operatoriaus reikalavimas C

The dydis() operatorius yra pagrindinis C programavimo komponentas, nes jai reikia įvairių atminties valdymo ir duomenų apdorojimo elementų. Supratimas duomenų tipas dydžiai yra būtini efektyviai paskirsto atmintį , ypač dirbant su masyvais ir dinaminiu atminties paskirstymu. Užtikrindama, kad būtų rezervuotas tinkamas atminties kiekis, ši informacija padeda išvengti atminties perpildymo ir optimizuoti atminties naudojimą. The dydis() operatorius taip pat būtinas kuriant nešiojamasis kodas , kuris gali būti vykdomas be klaida keliose sistemose su skirtingomis architektūromis ir duomenų tipų dydžiais.

Programa gali prisitaikyti prie daugelio platformų nereikalaujant rankinių pakeitimų, nes ji pateikia duomenų tipų dydį kompiliavimo metu. Be to, dydis() operatorius leidžia tiksliai naršyti duomenų struktūras ir masyvus dirbant su rodyklėmis, palengvinant saugią ir efektyvią rodyklės aritmetiką. Kita programa, skirta dydis() operatorius tvarko sąjungos ir struktūros . Tai užtikrina tikslų atminties paskirstymą ir prieigą sudėtingose ​​vietose duomenų struktūros , užkertant kelią klaidoms ir neefektyvumui. The dydis() operatorius yra pagrindinis įrankis, leidžiantis C programuotojams sukurti efektyvų, nešiojamą ir atsparų kodą, optimizuojant našumą ir duomenų vientisumą. Tai užtikrina saugus buferio valdymas ir palengvina duomenų serializavimą ir deserializavimą.

Išvada:

Apibendrinant galima pasakyti, kad C sizeof() operatorius yra naudinga priemonė skaičiuojant įvairių objektų dydį, įskaitant duomenų tipai, išraiškos, masyvai, struktūros, sąjungos , ir dar. Kompiliavimo metu siūlomas duomenų tipų dydis, pritaikytas kelioms platformoms ir nustatymams, todėl programuotojai gali kurti nešiojamą ir lankstų kodą. Kūrėjai gali veiksmingai tvarkyti atminties paskirstymas, rodyklės aritmetika , ir dinaminis atminties paskirstymas savo programose, žinodami apie įvairių duomenų tipų saugojimo poreikius.

Dirbant su masyvai ir struktūros , dydis() operatorius yra labai naudinga, nes užtikrina tinkamą atminties paskirstymas ir palengvina elementų nuskaitymą. Be to, tai palengvina rodyklės aritmetika , todėl lengviau judėti tarp atminties regionų. Tačiau dėl operatoriaus pirmenybės programuotojai turėtų būti atsargūs naudodami sudėtingas išraiškas su dydis() operatorius .

Apskritai, mokantis dydis() operatorius suteikia C programuotojams galimybę kurti stabilius ir pritaikomus programinės įrangos sprendimus, leidžiančius rašyti efektyvų, patikimą ir nuo platformos nepriklausomą kodą.