C Programmazione

Dimensioni dell'operatore in linguaggio C

Dimensioni dell'operatore in linguaggio C
In questo articolo, impareremo a conoscere la dimensione dell'operatore in C. È un operatore unario ampiamente utilizzato nello sviluppo di software embedded, che ci aiuta a scoprire la dimensione dell'operando. Pertanto, il valore restituito dall'operatore sizeof ci aiuta a capire il numero di byte allocati nella memoria del computer per contenere la particolare variabile o tipo di dati.

Comprensione delle dimensioni di:

Prima di immergerci nella discussione sulla dimensione dell'operatore, cerchiamo prima di capire il significato dell'operatore. Un Operatore è rappresentato da un token o simbolo che viene utilizzato per eseguire un'operazione come addizione, sottrazione, moltiplicazione, divisione, ecc. su valori o variabili (Operandi). Ad esempio, "*" è il simbolo che viene utilizzato per rappresentare l'operazione di moltiplicazione e funziona su due operandi (risultato = a * b ;). Questo è un esempio di operatore binario.

Tuttavia, se un operatore lavora su un solo operando, chiamiamo tale operatore un operatore unario. L'operatore sizeof è uno degli operatori unari che esistono nel linguaggio di programmazione C e apparentemente opera solo su un operando. L'operatore sizeof restituisce la dimensione dell'operando. Ciò significa che, dal valore restituito dall'operatore Sizeof, possiamo chiaramente dire quanti byte allocati per contenere il particolare operando nella memoria del computer.

La memoria di un computer è un insieme di unità di memoria (i.e. byte). Quando sizeof (int) restituisce quattro in un particolare sistema informatico, possiamo dire che una variabile intera impiega 4 byte per mantenere il suo valore nella memoria di quel computer specifico. Inoltre, tieni presente che il valore restituito dall'operatore sizeof dipende anche dalle macchine che stai utilizzando (sistema a 32 bit o sistema a 64 bit).

Sintassi:

Dimensione di (tipo)
Dimensione di (espressione)

Il tipo restituito da sizeof è size_t.

Esempi:

Ora poiché comprendiamo l'operatore sizeof e conosciamo la sintassi, diamo un'occhiata a un paio di esempi, che ci aiuteranno a capire meglio il concetto.

Sizeof per i tipi incorporati (esempio1.c):

In questo programma vedremo come funziona l'operatore sizeof per tipi di dati incorporati come int, char, float, double. Diamo un'occhiata al programma e all'output.

#includere
intero principale()

printf("Dimensione di char = %ld \n", sizeof(char));
printf("Dimensione di int = %ld \n", sizeof(int));
printf("Dimensione float = %ld \n", sizeof(float));
printf("Dimensione di double = %ld \n\n", sizeof(double));
printf("Dimensione di short int = %ld \n", sizeof(short int));
printf("Dimensione di long int = %ld \n", sizeof(long int));
printf("Dimensione di long long int = %ld \n", sizeof(long long int));
printf("Dimensione del doppio lungo = %ld \n", sizeof(doppio lungo));
restituisce 0;

Sizeof per Array (esempio2.c)

In questo programma vedremo come utilizzare l'operatore sizeof per diversi tipi di array. Nel caso di un array, l'operatore sizeof restituirà (No. di elementi nell'array * Sizeof (tipo di array)). Ad esempio, quando dichiariamo un array di tipo intero di 10 elementi (int SmartPhones [10] ;), sizeof(Smartphones) restituirà:

(No. di elementi negli smartphone * sizeof(int)) = (10 * 4) = 40

Diamo un'occhiata al programma e all'output.

#includere
intero principale()

smartphone int[10];
char SmartPhoneNames[10];
prezzo doppio smartphone[10];
printf("Dimensione di int = %ld \n", sizeof(int));
printf("Dimensione di char = %ld \n", sizeof(char));
printf("Dimensione di double = %ld \n", sizeof(double));
/* Scopri la dimensione dell'array*/
printf("Dimensione smartphone[10] = %ld \n", sizeof(SmartPhone));
printf("Dimensione dei nomi degli smartphone[10] = %ld \n", sizeof(nomi degli smartphone));
printf("Dimensione di SmartPhonesPrice[10] = %ld \n", sizeof(SmartPhonesPrice));
restituisce 0;

Sizeof per i tipi definiti dall'utente (esempio3.c):

In questo esempio, vedremo come utilizzare l'operatore sizeof per i tipi di dati definiti dall'utente come struttura e unione. Usiamo il programma e comprendiamo l'output.

Ora, guardando il programma, possiamo calcolare manualmente la dimensione di SmartPhoneType. Come puoi vedere di seguito, SmartPhoneType è una struttura e contiene i seguenti elementi:

  • Numero di variabili di tipo carattere = 1 [sp_name]
  • Numero di variabili di tipo intero = 1 [sp_version]
  • Numero di variabili di tipo float= 3 [sp_length, sp_width, sp_height]

Dall'esempio-1, abbiamo visto che:

    • La dimensione del carattere è 1 byte
    • La dimensione di un numero intero è 4 byte
    • La dimensione di un float è 4 byte

Pertanto, se sommiamo la dimensione di tutti gli elementi nella struttura, dovremmo essere in grado di ottenere la dimensione della struttura, i.e. Tipo di smartphone. Pertanto, la dimensione della struttura dovrebbe essere = (1 + 4 + 4 + 4 + 4) byte = 17 byte. Tuttavia, l'output del programma dice che la dimensione della struttura è 20. I 3 byte aggiuntivi (sp_name, che è un carattere, occupano 4 byte invece di 1 byte) allocati per la struttura a causa del riempimento della struttura.

#includere
/* Crea un tipo di struttura definito dall'utente - SmartPhoneType*/
struct SmartPhoneType

char nome_sp;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
Smartphone;
/* Definisce un tipo di unione definito dall'utente - SmartPhoneUnionType*/
Union SmartPhoneUnionType

char nome_sp;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhone_u;
intero principale()

/* Scopri la dimensione della struttura e dell'unione*/
printf("Dimensione della struttura = %ld \n", sizeof(SmartPhone));
printf("Dimensione dell'unione = %ld \n", sizeof(SmartPhone_u));
restituisce 0;

Sizeof per le variabili (esempio4.c):

Questo programma esempio illustra che l'operatore sizeof è in grado di accettare anche la variabile e restituire la dimensione della variabile.

#includere
intero principale()

/* Dichiara char, int, float e double type variabile e array */
char var_a, var_b[20];
int var_c, var_d[20];
float var_e, var_f[20];
doppio var_g, var_h[20];
/* Scopri la dimensione delle variabili e dell'array.
Questo programma dimostra che la variabile può anche
essere usato come operando sizeof operator*/
/* dimensione di char, variabile char e array di caratteri*/
printf("Dimensione di char = %ld \n", sizeof(char));
printf("Dimensione di var_a = %ld \n", sizeof(var_a));
printf("Dimensione di var_b[20] = %ld \n\n", sizeof(var_b));
/* dimensione di int, variabile int e array int*/
printf("Dimensione di int = %ld \n", sizeof(int));
printf("Dimensione di var_c = %ld \n", sizeof(var_c));
printf("Dimensione di var_d[20] = %ld \n\n", sizeof(var_d));
/* dimensione di float, variabile float e array float*/
printf("Dimensione float = %ld \n", sizeof(float));
printf("Dimensione di var_e = %ld \n", sizeof(var_e));
printf("Dimensione di var_f[20] = %ld \n\n", sizeof(var_f));
/* dimensione di double, double variabile e double array*/
printf("Dimensione di double = %ld \n", sizeof(double));
printf("Dimensione di var_g = %ld \n", sizeof(var_g));
printf("Dimensione di var_h[20] = %ld \n", sizeof(var_h));
restituisce 0;

Sizeof per l'espressione (esempio5.c):

In questo programma di esempio, dimostreremo che l'operatore sizeof può anche accettare un'espressione e restituire la dimensione dell'espressione risultante.

#includere
intero principale()

int var_a = 5, var_b = 3;
doppia var_c = 2.5, var_d = 4.5;
printf("Dimensione di int = %ld \n", sizeof(int));
printf("Dimensione del doppio = %ld \n\n", sizeof(doppio));
printf("Dimensione di var_a * var_b = %ld \n", sizeof(var_a * var_b));
printf("Dimensione di var_c * var_d = %ld \n", sizeof(var_c * var_d));
/* Qui stiamo moltiplicando una variabile intera per una doppia variabile.
Pertanto, l'operatore sizeof restituirà la dimensione della dimensione massima
variabile i.e. variabile di tipo doppio.*/
printf("Dimensione di var_a * var_c = %ld \n", sizeof(var_a * var_c));
restituisce 0;

Uso pratico di sizeof (esempio6.c):

Questo programma di esempio ti aiuterà a capire un caso d'uso pratico dell'operatore sizeof. L'operatore Sizeof è molto utile durante l'allocazione della memoria dinamica dall'heap usando malloc. Diamo un'occhiata al programma e all'output.

#includere
#includere
struttura typedef

char nome_sp;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
Tipo Smartphone;
intero principale()

/* Alloca memoria nella memoria Heap per contenere cinque SmartPhoneType
variabili.
*/
SmartPhoneType * SmartPhone_Ptr = (SmartPhoneType *)malloc(5 * sizeof(SmartPhoneType));
if(SmartPhone_Ptr != NULLO)

printf("Memoria allocata per 5 variabili di struttura SmartPhoneType in
la memoria Heap.\n");

altro

printf("Si è verificato un errore durante l'allocazione della memoria heap!");

restituisce 0;

Conclusione:

Il Sizeof è un importante operatore unario nel linguaggio di programmazione C. Ci aiuta a determinare la dimensione dei tipi di dati primitivi, tipi di dati definiti dall'utente, espressioni, ecc. nella memoria del computer. L'operatore Sizeof svolge un ruolo importante nell'allocare la memoria dinamica in C usando malloc, calloc, ecc. nella memoria dell'heap.

Tutorial Shadow of the Tomb Raider per Linux
Shadow of the Tomb Raider è la dodicesima aggiunta alla serie Tomb Raider, un franchise di giochi d'azione e avventura creato da Eidos Montreal. Il gi...
Come aumentare gli FPS in Linux?
FPS sta per Fotogrammi al secondo. Il compito dell'FPS è misurare il frame rate nelle riproduzioni video o nelle prestazioni di gioco game. In parole ...
I migliori giochi di laboratorio dell'app Oculus
Se possiedi un visore Oculus, devi essere informato sul sideloading. Il sideloading è il processo di installazione di contenuti non archiviati sul vis...