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.
- Baixar nossa apostila: Apostila de C
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:
Gostaria de registrar um elogio por ser de fácil compreensão as informações aqui encontradas. Estão mandando bem.
Parabens! otimo conteudo e muito bem explicado!!!!
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.
Bit Help Informática, sobre isto, veja em matrizes.
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:
Nsa prende theu ku kel pagina li. Muitu brigadu pa kriAdir
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/
Melhor site para se estudar C.
Parabéns pelo trabalho, graças a vocês aprendo a programar C todos os dias.
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
Muito Bom, Parabéns!
SO FALTOU OS COLCHETES DEPOIS DO FOR MAIS FORA ISSO BOA AULA !!
Gostaria de agredecer, excelente apostila, esta me ajudando muito.
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?
Postar um comentário