Sizeof Operator em C Language

Sizeof Operator em C Language
Neste artigo, vamos aprender sobre o tamanho do operador em C. É um operador unário amplamente utilizado no desenvolvimento de software incorporado, o que nos ajuda a descobrir o tamanho do operando. Portanto, o valor de retorno do operador de tamanho do.

Entendendo o tamanho de:

Antes de mergulharmos na discussão do operador de tamanho, vamos primeiro entender o significado do operador. Um operador é representado por um token ou símbolo que é usado para executar uma operação como adição, subtração, multiplicação, divisão, etc. mediante valores ou variáveis ​​(operando). Por exemplo, " *" é o símbolo usado para representar a operação de multiplicação e funciona em dois operandos (resultado = a * b;). Este é um exemplo de operador binário.

No entanto, se um operador trabalhar em apenas um operando, chamamos um operador como um operador unário. O tamanho do operador é um dos operadores unários que existem na linguagem de programação C e, aparentemente, opera apenas em um operando. O tamanho do operador retorna o tamanho do operando. Isso significa que, desde o valor de retorno do operador de tamanho de, podemos dizer claramente quantos bytes alocados para manter o operando específico na memória.

A memória de um computador é uma coleção de unidades de memória (i.e. byte). Quando o sizeof (int) retorna quatro em um sistema de computador específico, podemos dizer que uma variável inteira obtém 4 bytes para manter seu valor na memória do sistema de computador específico. Além disso, observe que o valor de retorno do tamanho do operador também depende das máquinas que você está usando (sistema de 32 bits ou sistema de 64 bits).

Sintaxe:

Tamanho de (tipo)
Tamanho de (expressão)

O tipo de retorno de tamanho de é tamanho_t.

Exemplos:

Agora, como entendemos o tamanho do operador e conhecemos a sintaxe, vejamos alguns exemplos, o que nos ajudará a entender o conceito de uma maneira melhor.

  • Tamanho de tipos internos (exemplo1.c)
  • Sizeof for Array (exemplo2.c)
  • Tamanho de tipos definidos pelo usuário (exemplo3.c)
  • Tamanho de variáveis ​​(exemplo4.c)
  • Tamanho de para expressão (exemplo5.c)
  • Uso prático do tamanho do (exemplo6.c)

Tamanho de tipos internos (exemplo1.c):

Neste programa, veremos como o tamanho do operador funciona para tipos de dados internos, como int, char, flutuação, dupla. Vejamos o programa e a saída.

#incluir
int main ()

printf ("tamanho de char = %ld \ n", sizeof (char));
printf ("tamanho de int = %ld \ n", sizeof (int));
printf ("tamanho de float = %ld \ n", sizeof (float));
printf ("tamanho de duplo = %ld \ n \ n", sizeof (duplo));
printf ("tamanho de curto int = %ld \ n", sizeof (curto int));
printf ("tamanho de long int = %ld \ n", sizeof (longo int));
printf ("tamanho de longo longo int = %ld \ n", sizeof (longo interior));
printf ("Tamanho de Long Double = %LD \ n", Sizeof (Longo Double));
retornar 0;

Sizeof for Array (exemplo2.c)

Neste programa, veremos como usar o operador de tamanho de diferentes tipos de matriz. Em caso de uma matriz, o tamanho do operador retornará (não. de elementos na matriz * sizeof (tipo de matriz))). Por exemplo, quando declaramos uma matriz do tipo inteiro de 10 elementos (int smartphones [10];), o sizeof (smartphones) retornará:

(Não. de elementos em smartphones * sizeof (int)) = (10 * 4) = 40

Vejamos o programa e a saída.

#incluir
int main ()

int smartphones [10];
Char SmartphoneNames [10];
duplo smartphonesprice [10];
printf ("tamanho de int = %ld \ n", sizeof (int));
printf ("tamanho de char = %ld \ n", sizeof (char));
printf ("tamanho de duplo = %ld \ n", sizeof (duplo));
/* Descubra o tamanho de matriz*/
printf ("tamanho dos smartphones [10] = %ld \ n", sizeof (smartphones));
printf ("tamanho de smartphoneNames [10] = %ld \ n", sizeof (smartphoneNames));
printf ("tamanho do smartphonesprice [10] = %ld \ n", sizeof (smartphonesprice));
retornar 0;

Tamanho de tipos definidos pelo usuário (exemplo3.c):

Neste exemplo, veremos como usar o Sizeof Operator para tipos de dados definidos pelo usuário, como estrutura e união. Vamos usar o programa e entender a saída.

Agora, olhando para o programa, e podemos calcular manualmente o tamanho do smartphoneType. Como você pode ver abaixo, o smartphoneType é uma estrutura e contém os seguintes elementos:

  • Número da variável do tipo de caractere = 1 [sp_name]
  • Número da variável do tipo inteiro = 1 [sp_version]
  • Número de variáveis ​​do tipo flutuante = 3 [SP_LENGLE, SP_WIDTH, SP_HEIGHT]

Do exemplo 1, vimos isso:

    • O tamanho do caractere é 1 byte
    • O tamanho de um número inteiro é de 4 bytes
    • O tamanho de um flutuador é de 4 bytes

Portanto, se somarmos o tamanho de todos os elementos da estrutura, deveríamos ser capazes de obter o tamanho da estrutura, eu.e. SmartphoneType. Portanto, o tamanho da estrutura deve ser = (1 + 4 + 4 + 4 + 4) bytes = 17 bytes. No entanto, a saída do programa diz que o tamanho da estrutura é 20. Os 3 bytes extras (sp_name, que é um personagem, estão pegando 4 bytes em vez de 1 byte) alocados para a estrutura devido ao preenchimento da estrutura.

#incluir
/* Crie um tipo de estrutura definido pelo usuário - smartphoneType*/
Struct smartphoneType

char sp_name;
int sp_version;
float sp_length;
flutuar sp_width;
flutuar SP_Height;
Smartphone;
/* Defina um tipo de união definido pelo usuário - smartphoneuniontype*/
Union SmartphoneUnioType

char sp_name;
int sp_version;
float sp_length;
flutuar sp_width;
flutuar SP_Height;
Smartphone_u;
int main ()

/* Descubra o tamanho da estrutura e união*/
printf ("tamanho da estrutura = %ld \ n", sizeof (smartphone));
printf ("tamanho da união = %ld \ n", sizeof (smartphone_u));
retornar 0;

Tamanho de variáveis ​​(exemplo4.c):

Este programa de exemplo ilustra que o tamanho do operador é capaz de aceitar a variável também e retornar o tamanho da variável.

#incluir
int main ()

/ * Declare Char, Int, Float e Double Type Variable and Array */
char var_a, var_b [20];
int var_c, var_d [20];
flutuar var_e, var_f [20];
duplo var_g, var_h [20];
/* Descubra o tamanho de variáveis ​​e matriz.
Este programa demonstra que a variável também pode
ser usado como um tamanho de operador do operador*/
/* Tamanho de Char, Char Variable e Char Array*/
printf ("tamanho de char = %ld \ n", sizeof (char));
printf ("tamanho de var_a = %ld \ n", sizeof (var_a));
printf ("tamanho de var_b [20] = %ld \ n \ n", sizeof (var_b));
/* Tamanho de int, int variável e int matriz*/
printf ("tamanho de int = %ld \ n", sizeof (int));
printf ("tamanho de var_c = %ld \ n", sizeof (var_c));
printf ("tamanho de var_d [20] = %ld \ n \ n", sizeof (var_d));
/* Tamanho da flutuação, variável flutuante e matriz de flutuação*/
printf ("tamanho de float = %ld \ n", sizeof (float));
printf ("tamanho de var_e = %ld \ n", sizeof (var_e));
printf ("tamanho de var_f [20] = %ld \ n \ n", sizeof (var_f));
/* Tamanho de variável dupla, dupla e matriz dupla*/
printf ("tamanho de duplo = %ld \ n", sizeof (duplo));
printf ("tamanho de var_g = %ld \ n", sizeof (var_g));
printf ("tamanho de var_h [20] = %ld \ n", sizeof (var_h));
retornar 0;

Tamanho de para expressão (exemplo5.c):

Neste programa de exemplo, demonstraremos que o tamanho do operador também pode aceitar uma expressão e retornar o tamanho da expressão resultante.

#incluir
int main ()

int var_a = 5, var_b = 3;
duplo var_c = 2.5, var_d = 4.5;
printf ("tamanho de int = %ld \ n", sizeof (int));
printf ("tamanho de duplo = %ld \ n \ n", sizeof (duplo));
printf ("tamanho de var_a * var_b = %ld \ n", sizeof (var_a * var_b));
printf ("tamanho de var_c * var_d = %ld \ n", sizeof (var_c * var_d));
/* Aqui estamos multiplicando uma variável inteira com uma variável dupla.
Portanto, o tamanho do operador retornará o tamanho do tamanho máximo
variável i.e. Variável de tipo duplo.*/
printf ("tamanho de var_a * var_c = %ld \ n", sizeof (var_a * var_c));
retornar 0;

Uso prático do tamanho do (exemplo6.c):

Este programa de exemplo o ajudará a entender um caso de uso prático do operador de tamanho de. O tamanho do operador é muito útil ao alocar a memória dinâmica do Heap usando o Malloc. Vejamos o programa e a saída.

#incluir
#incluir
typedef struct

char sp_name;
int sp_version;
float sp_length;
flutuar sp_width;
flutuar SP_Height;
SmartphoneType;
int main ()

/* ALOCAR MEMÓRIR
variáveis.
*/
SmartphoneType * smartphone_ptr = (smartphoneType *) malloc (5 * sizeof (smartphoneType));
if (smartphone_ptr != Nulo)

printf ("Memória alocada para 5 variáveis ​​de estrutura smartphoneType
a memória da heap.\ n ");

outro

Printf ("Ocorreu o erro durante a alocação de memória da heap!");

retornar 0;

Conclusão:

O tamanho de é um importante operador unário na linguagem de programação C. Isso nos ajuda a determinar o tamanho dos tipos de dados primitivos, tipos de dados definidos pelo usuário, expressões, etc. na memória do computador. O tamanho do operador desempenha um papel importante na alocação de memória dinâmica em C usando o MALLOC, Calloc, etc. Na memória da heap.