Programare C

Dimensiunea operatorului în limbajul C

Dimensiunea operatorului în limbajul C
În acest articol, vom afla despre mărimea operatorului în C. Este un operator unar utilizat pe scară largă în dezvoltarea de software încorporat, ceea ce ne ajută să aflăm dimensiunea operandului. Prin urmare, valoarea de returnare a mărimii operatorului ne ajută să înțelegem numărul de octeți alocați în memoria computerului pentru a păstra variabila particulară sau tipul de date.

Înțelegerea dimensiunii:

Înainte de a ne arunca cu capul în dimensiunea operatorului, să înțelegem mai întâi semnificația operatorului. Un Operator este reprezentat de un simbol sau simbol care este utilizat pentru a efectua o operație cum ar fi adunarea, scăderea, înmulțirea, divizarea etc. pe valori sau variabile (operanzi). De exemplu, „*” este simbolul utilizat pentru a reprezenta operația de multiplicare și funcționează pe doi operanzi (rezultat = a * b;). Acesta este un exemplu de operator binar.

Cu toate acestea, dacă un operator lucrează pe un singur operand, îl chemăm pe un astfel de operator ca operator unar. Mărimea operatorului este unul dintre operatorii unari care există în limbajul de programare C și aparent, operează doar pe un singur operand. Mărimea operatorului returnează dimensiunea operandului. Asta înseamnă că, din valoarea returnată a operatorului Sizeof, putem spune clar câți octeți alocați pentru a păstra un anumit operand în memoria computerului.

Memoria unui computer este o colecție de unități de memorie (i.e. octet). Când sizeof (int) returnează patru într-un anumit sistem de calcul, putem spune că o variabilă întreagă necesită 4 octeți pentru a-și păstra valoarea în memoria respectivă a sistemului de computer. De asemenea, vă rugăm să rețineți că valoarea returnată a operatorului de dimensiune depinde și de mașinile pe care le utilizați (sistem pe 32 de biți sau sistem pe 64 de biți).

Sintaxă:

Dimensiunea (tip)
Dimensiunea (expresie)

Tipul returnat de sizeof este size_t.

Exemple:

Acum, deoarece înțelegem dimensiunea operatorului și cunoaștem sintaxa, să ne uităm la câteva exemple, care ne vor ajuta să înțelegem conceptul într-un mod mai bun.

Dimensiunea pentru tipurile încorporate (exemplu1.c):

În acest program, vom vedea cum funcționează mărimea operatorului pentru tipuri de date încorporate precum int, char, float, double. Să ne uităm la program și la ieșire.

#include
int main ()

printf ("Dimensiunea caracterului =% ld \ n", sizeof (caracter));
printf ("Dimensiunea int =% ld \ n", sizeof (int));
printf ("Dimensiunea float =% ld \ n", sizeof (float));
printf ("Dimensiunea dublu =% ld \ n \ n", dimensiunea (dublu));
printf ("Dimensiunea short int =% ld \ n", sizeof (short int));
printf ("Dimensiunea long int =% ld \ n", sizeof (long int));
printf ("Dimensiunea long long int =% ld \ n", sizeof (long long int));
printf ("Dimensiunea dublului lung =% ld \ n", dimensiunea (dublul lung));
retur 0;

Sizeof for Array (exemplu2.c)

În acest program, vom vedea cum să folosim operatorul sizeof pentru diferite tipuri de matrice. În cazul unei matrice, mărimea operatorului va reveni (nr. de elemente din matrice * Dimensiune (tip matrice)). De exemplu, atunci când declarăm o matrice de tip întreg de 10 elemente (SmartPhones [10];), dimensiunea (Smartphone-uri) va reveni:

(Nu. de elemente în SmartPhones * sizeof (int)) = (10 * 4) = 40

Să ne uităm la program și la ieșire.

#include
int main ()

int SmartPhones [10];
char SmartPhoneNames [10];
SmartPhonesPrice dublu [10];
printf ("Dimensiunea int =% ld \ n", sizeof (int));
printf ("Dimensiunea caracterului =% ld \ n", sizeof (caracter));
printf ("Dimensiunea dublu =% ld \ n", dimensiunea (dublu));
/ * Aflați dimensiunea Array * /
printf ("Dimensiunea SmartPhones [10] =% ld \ n", sizeof (SmartPhones));
printf ("Dimensiunea SmartPhoneNames [10] =% ld \ n", sizeof (SmartPhoneNames));
printf ("Dimensiunea SmartPhonesPrice [10] =% ld \ n", sizeof (SmartPhonesPrice));
retur 0;

Dimensiunea pentru tipurile definite de utilizator (exemplu3.c):

În acest exemplu, vom vedea cum să folosim operatorul sizeof pentru tipuri de date definite de utilizator, cum ar fi structura și uniunea. Să folosim programul și să înțelegem rezultatul.

Acum, uitându-ne la program, putem calcula manual dimensiunea SmartPhoneType. După cum puteți vedea mai jos, SmartPhoneType este o structură și conține următoarele elemente:

  • Numărul variabilei de tip de caracter = 1 [nume_sp]
  • Numărul variabilei de tip întreg = 1 [sp_version]
  • Numărul de variabile de tip float = 3 [sp_length, sp_width, sp_height]

Din exemplul-1, am văzut că:

    • Dimensiunea caracterului este de 1 octet
    • Dimensiunea unui întreg este de 4 octeți
    • Dimensiunea unui float este de 4 octeți

Prin urmare, dacă adunăm dimensiunea tuturor elementelor din structură, ar trebui să putem obține dimensiunea structurii, i.e. SmartPhoneType. Prin urmare, dimensiunea structurii ar trebui să fie = (1 + 4 + 4 + 4 + 4) octeți = 17 octeți. Cu toate acestea, rezultatul programului spune că dimensiunea structurii este de 20. Cei 3 octeți suplimentari (sp_name, care este un caracter, ia 4 octeți în loc de 1 octet) alocați pentru structură datorită căptușirii structurii.

#include
/ * Creați un tip de structură definit de utilizator - SmartPhoneType * /
struct SmartPhoneType

char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhone;
/ * Definiți un tip de uniune definit de utilizator - SmartPhoneUnionType * /
Union SmartPhoneUnionType

char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhone_u;
int main ()

/ * Aflați dimensiunea structurii și uniunii * /
printf ("Dimensiunea struct =% ld \ n", sizeof (SmartPhone));
printf ("Dimensiunea uniunii =% ld \ n", sizeof (SmartPhone_u));
retur 0;

Dimensiunea variabilelor (exemplu4.c):

Acest exemplu de program ilustrează faptul că operatorul sizeof este capabil să accepte și variabila și să returneze dimensiunea variabilei.

#include
int main ()

/ * Declarați variabile și matrice de tip char, int, float și dublu * /
char var_a, var_b [20];
int var_c, var_d [20];
float var_e, var_f [20];
dublu var_g, var_h [20];
/ * Aflați dimensiunea variabilelor și a matricei.
Acest program demonstrează că variabila poate, de asemenea
să fie folosit ca dimensiune de operand al operatorului * /
/ * dimensiunea caracterelor, variabilei char și matricei de caractere * /
printf ("Dimensiunea caracterului =% ld \ n", sizeof (caracter));
printf ("Dimensiunea var_a =% ld \ n", sizeof (var_a));
printf ("Dimensiunea var_b [20] =% ld \ n \ n", sizeof (var_b));
/ * dimensiunea int, variabila int și matrice int * /
printf ("Dimensiunea int =% ld \ n", sizeof (int));
printf ("Dimensiunea var_c =% ld \ n", sizeof (var_c));
printf ("Dimensiunea var_d [20] =% ld \ n \ n", sizeof (var_d));
/ * dimensiunea float, variabila float și matricea float * /
printf ("Dimensiunea float =% ld \ n", sizeof (float));
printf ("Dimensiunea var_e =% ld \ n", sizeof (var_e));
printf ("Dimensiunea var_f [20] =% ld \ n \ n", sizeof (var_f));
/ * dimensiunea matricei duble, duble variabile și duble * /
printf ("Dimensiunea dublu =% ld \ n", dimensiunea (dublu));
printf ("Dimensiunea var_g =% ld \ n", sizeof (var_g));
printf ("Dimensiunea var_h [20] =% ld \ n", sizeof (var_h));
retur 0;

Dimensiunea pentru exprimare (exemplu5.c):

În acest exemplu de program, vom demonstra că operatorul sizeof poate accepta și o expresie și poate returna dimensiunea expresiei rezultate.

#include
int main ()

int var_a = 5, var_b = 3;
dublu var_c = 2.5, var_d = 4.5;
printf ("Dimensiunea int =% ld \ n", sizeof (int));
printf ("Dimensiunea dublu =% ld \ n \ n", dimensiunea (dublu));
printf ("Dimensiunea var_a * var_b =% ld \ n", sizeof (var_a * var_b));
printf ("Dimensiunea var_c * var_d =% ld \ n", sizeof (var_c * var_d));
/ * Aici înmulțim o variabilă întreagă cu o variabilă dublă.
Prin urmare, sizeof operator va returna dimensiunea maximă
variabila i.e. variabilă de tip dublu.* /
printf ("Dimensiunea var_a * var_c =% ld \ n", sizeof (var_a * var_c));
retur 0;

Utilizarea practică a mărimii (exemplu6.c):

Acest exemplu de program vă va ajuta să înțelegeți un caz practic de utilizare a operatorului sizeof. Operatorul Sizeof este foarte util în timp ce alocați memoria dinamică din heap folosind malloc. Să ne uităm la program și la ieșire.

#include
#include
typedef struct

char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhoneType;
int main ()

/ * Alocați memoria în memoria Heap pentru a păstra cinci SmartPhoneType
variabile.
* /
SmartPhoneType * SmartPhone_Ptr = (SmartPhoneType *) malloc (5 * sizeof (SmartPhoneType));
dacă (SmartPhone_Ptr != NUL)

printf ("Memorie alocată pentru 5 variabile de structură SmartPhoneType în
memoria Heap.\ n ");

altceva

printf ("A apărut o eroare în timpul alocării memoriei heap!");

retur 0;

Concluzie:

Sizeof este un operator unar important în limbajul de programare C. Ne ajută la determinarea mărimii tipurilor de date primitive, tipurilor de date definite de utilizator, expresiilor etc. în memoria calculatorului. Operatorul Sizeof joacă un rol important în alocarea memoriei dinamice în C folosind malloc, calloc etc. în memoria Heap.

Cele mai bune jocuri pentru a juca cu urmărirea manuală
Oculus Quest a introdus recent marea idee de urmărire manuală fără controlere. Cu un număr din ce în ce mai mare de jocuri și activități care execută ...
Cum se afișează suprapunerea OSD în aplicații și jocuri Linux pe ecran complet
Jucarea jocurilor pe ecran complet sau utilizarea aplicațiilor în modul ecran complet fără distragere vă poate elimina din informațiile relevante ale ...
Top 5 cărți de captură a jocului
Cu toții am văzut și ne-au plăcut jocurile de streaming pe YouTube. PewDiePie, Jakesepticye și Markiplier sunt doar câțiva dintre cei mai buni jucător...