aula 300

O que faz o modificador STATIC na linguagem C?

Aproveitando um gancho com a aula anterior, vamos aprender nesta aula o que é e para que serve o modificador static na linguagem de programação C.

Na aula anterior eu mencionei que não seria possível criar variáveis locais, dentro da nossa função, para acumular o somatório dos pares e contar a quantidade de pares para, no final, calcular a média.

Esta afirmação é parcialmente verdadeira.

Se criarmos duas variáveis inteiras para armazenar os valores da forma como estamos acostumados, assim:

float mediaPares(int vet[], int tam){

    int soma = 0, quant = 0;

    // continuação da função
}

realmente não teremos sucesso e o resultado final estará completamente errado. Isso acontece porque em cada chamada recursiva serão criadas duas novas variáveis inicializadas com o valor zero.

Contudo, se fosse possível criar estas duas variáveis apenas na primeira vez resolveria nosso problema, certo?

Podemos fazer isso colocando à esquerda o modificador static. Este modificador diz ao computador para criar as variáveis apenas uma vez. Assim, em toda chamada recursiva que for feita, as variáveis já existirão, então terão seus valores atualizados.

A seguir apresentamos o código completo para o mesmo problema da aula anterior. Contudo, agora passamos apenas dois parâmetros para nossa função, o vetor e o tamanho do vetor. As outras duas variáveis são criadas dentro da função com o modificador static.

Código completo de exemplo em C

#include <stdio.h>
#include <stdlib.h>

/*
       Código escrito por Wagner Gaspar
       Novembro de 2021
*/

static int valor = 50;

float mediaPares(int vet[], int tam){
    static int soma = 0, quant = 0;

    if(tam == 0)
        return (soma * 1.0) / quant;
    else{
        if(vet[tam - 1] % 2 == 0){
            soma = soma + vet[tam - 1];
            quant++;
            return mediaPares(vet, tam - 1);
        }
        else
            return mediaPares(vet, tam - 1);
    }
}

int main(){

    int vet[6] = {2,4,38,7,11,9};

    printf("Media dos pares: %f\n", mediaPares(vet, 6));

    return 0;
}

Deixe um comentário

17 + oito =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.