Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

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:

O Ka, a Roda e o Vento disse...

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

Anônimo disse...

Parabens! otimo conteudo e muito bem explicado!!!!

Bit Help Informática disse...

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.

Fernando disse...

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

IzabelaLima disse...

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:

Unknown disse...

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

Unknown disse...

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/

Unknown disse...

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

wagner disse...

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

Lucas de Lima disse...

Muito Bom, Parabéns!

Anônimo disse...

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

Joyce Soares disse...

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

visitadoblog disse...

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?