Inicializando vetores – Vetor de caracteres e Lixo

Agora que você aprendeu o que são vetores, como declarare viu alguns exemplos de seu uso, vamos explicar um pouco mais sobre a inicialização de vetores e os cuidados que devemos ter ao manipular vetores, ou arrays, em C.

Aproveitando o assunto sobre cuidados com vetores, vamos mostrar neste tutorial de nossa apostila de C o que são os ‘lixos’ que ficam nos vetores (e variáveis), como nos vetores de caracteres.

Inicializando vetores

Assim como nas variáveis, podemos inicializar os vetores assim que declaramos.
Como são vários valores, temos que colocar todos esses valores entre chaves {}.

Veja, pra inicializar um vetor de 3 inteiros:
int numeros[3] = { 1, 2, 3};

Ou seja:
numeros[0] = 1;
numeros[1] = 2;
numeros[2] = 3;


E para caracteres? Ora, vale o mesmo.
Vamos armazenar a frase: C Progressivo
Com o caractere de new line \n, temos que declarar 14 caracteres (incluindo o espaço em branco, que também é um char em C).

Para exibir, nossa programa ficaria assim:

#include <stdio.h>
 
int main()
{
    char curso[14] = {'C', ' ', 'P', 'r', 'o', 'g', 'r'
                     , 'e', 's', 's', 'i', 'v', 'o','\n'};
    int indice;
 
    for(indice=0 ; curso[indice] != '\n' ; indice++)
        printf("%c", curso[indice]);
}


Consegue, só olhando o código, saber o que vai acontecer?

Mas um vetor de caracteres é uma coisa especial, em linguagem C, chamada string, e teremos uma seção em nosso curso especialmente dedicada ao estudo das strings, de tão importantes que elas são.






O que é o Lixo, em linguagem C

Já se perguntou por que declaramos variáveis? Aliás, o que é declarar?
O ato de declarar é sinônimo de alocar. Quando declaramos uma variável, estamos alocando (separando) um espaço na memória do computador para ela.

Lembra que dissemos que é uma linguagem de baixo nível, que trabalha no ‘talo’ da sua máquina?
Pois é, declarar é como dizer: “Ei C, separa um pedaço da memória pra essa variável, ok?”

Mas nos espaços da memória já existem ‘coisas’, números, bits, dados...enfim, todo bloquinho da memória do seu computador já foi usando antes, por outros programas que deixaram ‘vestígios’.

Diferente de outras linguagens, como Java que cada variável inicie com valor zero, ‘’ ou NULL
, o C não limpa esses espaços. É um erro muito comum dos iniciantes não inicializar suas variáveis, então quando vão rodar seus programas percebem uns números gigantes e/ou negativos, totalmente nada a ver.


Vamos captar alguns lixos!
Declare um vetor, de quantas posições quiser de 10, por exemplo.
Não inicie nada, vamos ver que valores estavam armazenados antes do C alocar esses espaços para nosso aplicativo.

Para isso, basta rodar um laço que percorra todos as casas e verá o tanto de coisas bizarras que aparecem:

#include <stdio.h>

int main()
{
    int lixo[10];
    int indice;

    for(indice=0 ; indice < 11 ; indice++)
        printf("Lixo na posicao %d: %d\n", indice, lixo[indice]);
}

No caso, até extrapolamos os valores do índice do vetor, e fomos até a posição 10.
Podemos fazer isso pois quando o C seleciona um espaço de memória pra vetores, ele tenta sempre alocar espaços contíguos (vizinhos).

Teste com caracteres também:

#include <stdio.h>

int main()
{
    char lixo[10];
    int indice;

    for(indice=0 ; indice < 11 ; indice++)
        printf("Lixo na posicao %d: %c\n", indice, lixo[indice]);
}

Interessante, não?
Como já dizia o filósofo programador C: há mais coisas entre o programa e o hardware que nossa vã programação imagina.


13 comentários:

  1. Gostaria de registrar um elogio por ser de fácil compreensão as informações aqui encontradas. Estão mandando bem.

    ResponderExcluir
  2. Parabens! otimo conteudo e muito bem explicado!!!!

    ResponderExcluir
  3. Olá, estou começando agora em C e já estou cheio de dúvidas. Quero fazer uma letra Z na tela. Como ficaria usando um vetor.
    Grato.

    ResponderExcluir
  4. Bit Help Informática, sobre isto, veja em matrizes.

    ResponderExcluir
  5. Gente, eu tentei fazer o exemplo que escreve C Progressivo no meu devc++ e não deu certo, não aparece nada na tela preta D:

    ResponderExcluir
  6. Nsa prende theu ku kel pagina li. Muitu brigadu pa kriAdir

    ResponderExcluir
  7. Bit Help Informática, no link a seguir apresento um projeto de Letreiro:
    https://aulasguilherme.wordpress.com/2016/03/26/projeto-34-letreiro-3-0-ultra-reduzido/

    ResponderExcluir
  8. Melhor site para se estudar C.
    Parabéns pelo trabalho, graças a vocês aprendo a programar C todos os dias.

    ResponderExcluir
  9. Por exemplo: Um numero composto pelos dígitos 1735135-5 são dividido da seguinte forma para atender aos requisitos da atividade: 17 para o valor de X, 35 como tamanho do vetor, e 1 como sendo a quantidade de valores do vetor a serem exibidos. O programa deve utilizar basicamente laços de repetição para preencher e exibir os valores do vetor.

    Após o vetor estar preenchido, o programa deve permitir que uma quantidade de valores do vetor preenchido seja exibida na tela, sendo esta quantidade determinada pelo quinto dígito de seu numero


    poderia me tirar esta duvida

    ResponderExcluir
  10. SO FALTOU OS COLCHETES DEPOIS DO FOR MAIS FORA ISSO BOA AULA !!

    ResponderExcluir
  11. Gostaria de agredecer, excelente apostila, esta me ajudando muito.

    ResponderExcluir
  12. Porque quando inicializamos um vetor que é elemento de uma struct só indicamos como nulo o primeiro espaço dele e não todos os espaços ?

    #define MAX 100

    struct {
    char nome[30];
    char cidade[40];
    char estado[3];
    insigned long int zip;
    }agenda[MAX];

    int main()
    {
    Inic_vetor();

    }
    int vetor()
    {
    int i;
    for(i=0; i<MAX ++i;){
    agenda[i].nome[0] = ‘\0’;
    }

    O nome são trinta espaços e a estrutura cem. Qual seria a forma correta? Outra coisa nesse código ++i e i++ sao a mesma coisa?

    ResponderExcluir

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.