sábado, 9 de abril de 2016

Variável static local

Quando precisamos de uma variável de valor efetivo entre chamadas
de funções, usamos com efeito o modificador static.
Sabemos que variáveis locais só podem ser usadas dentro da função
onde foi declarada e variáveis globais podem ser usadas sem problemas
em qualquer função dentro do mesmo programa.
Apesar de uma variável static local ser reconhecida apenas no bloco
de código onde foi declarada, ao contrário de variáveis globais,
como mencionei acima, o programador pode se aproveitar do valor
no qual ela foi inicializada em outras funções entre quantas chamadas forem necessárias,
aliás é muito correto e quase sempre necessário inicializar uma variável static local.
No programa abaixo mostro dois exemplos aplicando o modificador
static a variáveis locais.
No primeiro dentro da função Contador(); não inicializado por mim,
más pelo compilador que automaticamente iniciou a variável static int n em 0,
e que é incrementada a cada chamada, temos um contador até 5.
No segundo dentro da função Mult(); temos os primeiros 5 múltiplos
de 3.

Veja abaixo uma imagem do programa em funcionamento:



Veja abaixo o código do programa:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void got_color ( int tam_lin_ini, int tam_lin_fim,
         int tam_ini_col, int tam_fim_col, int a, int b ) {
     int i, e;
     if ( a >= 1 && a <= 16 ){
         textcolor ( a );
     }
     if ( b >= 1 && b <= 16 ){
         textbackground ( b );
     }
     for ( i = tam_lin_ini; i <  tam_lin_fim; i++ ) {
         for ( e = tam_ini_col; e < tam_fim_col; e++ ){
              gotoxy ( e, i );
              printf(" ");
         }
     }
}
int Contador ( ) {
     static int n;
     return ++n;
}
int Mult ( ){
     static int num;
     num = num + 3;
     return ( num );
}
int main() {
     system ("title VARIÁVEL STATIC LOCAL");
     got_color ( 2, 25, 3, 79, 2, 15 );//Moldura
     int i;
     textcolor(LIGHTRED);gotoxy(31,3);
     printf("VARIÁVEL STATIC LOCAL");
     textcolor(LIGHTBLUE);gotoxy(31,5);
     printf("Abaixo a função Contador");
     textcolor(BLACK);gotoxy(35,7);
     for ( i = 0; i < 5; ++i )
         printf("%d ", Contador ( ) );
     getche();
     textcolor(LIGHTBLUE);gotoxy(31,9);
     printf("Abaixo a função Mult");
     textcolor(LIGHTMAGENTA);gotoxy(35,11);
     for ( i = 0; i < 5; ++i ){
         printf("%d ", Mult ( ) );
     }
     Sleep (1800);
     textcolor ( LIGHTRED );gotoxy ( 26, 15 );
     printf ( "Por: " );
     textcolor(LIGHTBLUE);
     printf ( "Samuel Lima" );
     textcolor(BLACK);gotoxy ( 26, 16 );
     printf ( "sa_sp10@hotmail.com" );
     Sleep (1800);textcolor(LIGHTRED);gotoxy ( 37, 23 );
     printf ( "MUITO OBRIGADO" );
     getche();
     exit(0);
     return 0;
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.