Introdução às classes de armazenamento C

Todo valor ou número precisa ser armazenado em algum lugar para uso posterior, certo? Isso pode ser feito usando variáveis ​​em C. Variáveis ​​são áreas de armazenamento usadas em nossos programas. Cada variável será de um tipo específico, como número inteiro, caractere e também terá tamanho e layout específicos, dependendo do tipo. Cada tipo de variável deve ser armazenado em uma parte específica da memória e terá permissões de acesso restritas ou específicas. As Classes de armazenamento em C determinam em qual parte da memória cada variável deve ser armazenada e também decide o escopo (visibilidade) da variável. Existem quatro tipos de classes de armazenamento - automática, externa, estática e registradora. Um especificador de armazenamento pode ser mencionado junto com a variável

Tipos de classes de armazenamento em C

Os tipos de classes de armazenamento em C são os seguintes

1. Classe de Armazenamento Automático

Todas as variáveis ​​declaradas em uma função ou bloco serão armazenadas em um especificador automático por padrão, mesmo que não estejam explicitamente definidas. O especificador para esta classe de armazenamento é 'auto'. O escopo ou a visibilidade das variáveis ​​na classe de armazenamento automático é local para o bloco ou função que está definido. A variável será destruída quando sairmos da função ou do bloco.

Isso pode ser explicado melhor com um exemplo. Considere o exemplo abaixo:

Código:

int main() (
int i = 2;
( int i = 4;
printf(“%d\n”, i);
)
printf(“%d\n”, i);
)

Resultado:

4

2

Aqui, uma variável I do tipo inteiro é declarada primeiro com o valor 2 atribuído a ela. A seguir, dentro de um loop ou bloco, a variável I do mesmo tipo inteiro é declarada com o valor 4 atribuído a ele. Se o especificador de armazenamento não for mencionado, por padrão, ele será tomado como automático. Na primeira instrução printf, mencionada dentro do bloco, imprimirá 4 ao imprimir o valor de I. Enquanto na segunda instrução printf mencionada fora do bloco, imprimirá o valor de I como 2, o valor mencionado fora o bloco. É melhor inicializar algum valor para variáveis ​​automáticas, pois há chances de obter algum valor de lixo às vezes se a inicialização não for concluída. Este exemplo fornece uma imagem clara das variáveis ​​automáticas e do escopo local.

2. Registrar Classe de Armazenamento

As variáveis ​​armazenadas na classe de armazenamento de registro também terão escopo local, o que significa que ela é acessível ou visível apenas no bloco em que é declarada. Esse armazenamento é semelhante ao automático, mas a principal diferença é que as variáveis ​​automáticas são armazenadas na memória, enquanto as variáveis ​​de registro são armazenadas nos registros da CPU. Isso é feito se queremos acessar a variável com muita frequência. Estes podem ser usados ​​mais rapidamente. Apenas algumas variáveis ​​são armazenadas usando especificadores de registro. Se não houver espaço no registro, ele será armazenado apenas na memória. Nenhum valor inicial é atribuído às variáveis ​​de registro. Além disso, o operador & (endereço de) não pode ser usado em variáveis ​​de registro. Por exemplo, variáveis ​​usadas para contadores ou tipos de uso semelhantes são armazenadas usando o especificador de registro.

3. Classe de Armazenamento Estático

A variável, seja global ou local, é armazenada usando o especificador estático na classe de armazenamento estático quando a variável precisa ser declarada uma vez e o valor precisa ser retido. Quando uma variável é declarada como estática, o valor será salvo ou retido entre as chamadas de função. O armazenamento permanente é criado e declarado apenas uma vez. Quando uma variável local é declarada como estática, o armazenamento permanente é criado para ela e o valor é retido toda vez que é usado. Também de acordo com o escopo da variável local usual, as variáveis ​​locais estáticas também são visíveis apenas para a função ou bloco em que está definida. Quando uma variável global é declarada como estática, semelhante ao local estático, o armazenamento permanente é criado e declarado apenas uma vez. Mas, mesmo sendo globais, essas variáveis ​​são visíveis apenas no arquivo em que estão definidas.

As variáveis ​​estáticas podem ser claramente representadas usando o exemplo abaixo:

Código:

int samplefunc() (
static int a = 0;
a = a+2;
return a;
)
int main() (
int result1 = samplefunc();
int result2 = samplefunc();
printf("%d\n", result1);
printf("%d\n", result2);
)

Resultado:

2

4

Aqui, no programa acima, quando o samplefunc () é chamado, a variável a é definida e inicializada na primeira vez e o armazenamento permanente é criado para ela. Pela expressão matemática usada na função, o valor de a se torna 2. Mas quando o mesmo samplefunc () é chamado na segunda vez, a variável a não é definida ou inicializada novamente, mas recebe o último valor retido e continua com a operação tornando o resultado final como 4. Esse é o principal uso e vantagem das variáveis ​​estáticas.

4. Classe de Armazenamento Externo

A variável declarada como externa mostra que a variável é definida em outro lugar em outro programa. Essas variáveis ​​externas são usadas quando queremos que qualquer variável ou função definida em um programa seja usada em outro arquivo também. As variáveis ​​com especificador externo são armazenadas na classe de armazenamento externo. Quando a variável é declarada como externa é um programa, ela especifica a ligação externa e, portanto, não é definida ou inicializada novamente. O armazenamento é alocado apenas um e também inicializado apenas uma vez. Se variáveis ​​externas forem inicializadas novamente com outro valor no programa externo, obteremos um erro informando 'Redefinição da variável'.

Variáveis ​​externas são explicadas usando o exemplo abaixo:

Código:

Prg1.c

int count;
int main() (
count = 10;
)

Prg2.c

extern int count;
int main() (
printf(“%d”, count);
)

Resultado:

10

Aqui, a contagem de variáveis ​​inteiras é declarada no primeiro programa C (Prg1.c) e, dentro da função principal, é inicializada com o valor 10. No segundo programa C, a mesma variável de contagem é declarada usando o especificador externo, que especifica que existe ligação externa e o valor é buscado no armazenamento e o valor 10 é atribuído à contagem de valores quando o imprimimos no segundo programa. Esse é o uso de variáveis ​​externas. Portanto, dependendo da finalidade diferente, cada classe de armazenamento é usada para variáveis ​​apropriadas e é declarada com os especificadores correspondentes.

Artigos recomendados

Este é um guia para as classes de armazenamento C. Aqui discutimos tipos de classes de armazenamento, que incluem classe de armazenamento automático, classe de armazenamento de registro, classe de armazenamento estático e classe de armazenamento externo. Você também pode consultar os seguintes artigos para saber mais:

  1. O que é o JavaBeans?
  2. ES6 vs ES5
  3. C ++ vs Visual C ++
  4. Desempenho C vs C ++