Escolar Documentos
Profissional Documentos
Cultura Documentos
Vetores e Matrizes
2023
Onde variáveis são declaradas
●
Três locais básicos para declaração de variáveis
– Dentro de funções
– Declaração de parâmetros de funções
– Fora de qualquer função
●
Variáveis locais
– Declaradas dentro de funções
●
Só existem dentro do bloco de código
– Variáveis automáticas
– Também incluem os parâmetros das funções
●
Variáveis globais
– Declaradas fora dos blocos das funções
– Visíveis para todas as funções do programa
Modificadores
●
Const
– Constantes
●
Volatile
– Alteração fora do controle do programa
●
Extern
– Declarada fora do módulo atual do programa (divisão de programas maiores)
●
Static
– Permanentes, mesmo declaradas dentro de funções, mantém valor entre chamadas
●
Não são reinicializadas entre chamadas
●
Register
– Solicita ao compilador para armazenar a variável em um registrador da CPU
●
Mais rápido que a memória convencional
– Tradicionalmente para int e char
– Atualmente para qualquer tipo, e significa uma solicitação de “acesso rápido ao objeto”
Ponteiros e endereços
●
Ponteiro
– Variável declarada para guardar um ponteiro para seu tipo especificado
– Três principais funções
●
Referência rápida para matrizes
●
Passagem de parâmetro por referência
●
Suporte a estruturas de dados dinâmicas
●
Operadores:
– &
●
Retorna o endereço na memória do seu operando: m = &count;
– *
●
Retorna o valor da variável apontada pelo endereço: q = *m; ou char *ch;
Mapa conceitual de memória em C
Pilha ●
Área de código
– Mantém o código do programa carregado
●
Variáveis globais e estáticas
– Espaço para variáveis declaradas em código, com tamanho
conhecido
●
Pilha
– Armazena dados de chamada de funções (incluindo main),
endereços de retorno, parâmetros, estados, além das variáveis
locais
Heap ●
Em geral 8 MB em sistemas Linux
●
Tamanho pode ser configurado
Variáveis globais ●
Heap
– Área livre de memória para alocação dinâmica
Código do
programa
Vetores
• Vetores ou Matrizes Unidimensionais
• Variável composta homogênea unidimensional
• Formada por uma sequência de variáveis
• Todas do mesmo tipo
• Com o mesmo identificador
• Mesmo nome
• Alocadas sequencialmente em memória
• Distinguidas por um índice
Vetores
• Vetores ou Matrizes Unidimensionais
• Variável composta homogênea unidimensional
• Formada por uma sequência de variáveis
• Todas do mesmo tipo
• Com o mesmo identificador
• Mesmo nome
• Alocadas sequencialmente em memória
• Distinguidas por um índice
Declaração de Matrizes Unidimensionais
• Usar tipo e tamanho em colchetes
• int vet[10];
• Dez inteiros, de 0 a 9 (tamanho -1)
• C não tem verificação de limites em matrizes
• É possível ultrapassar o fim de uma matriz
• Escrever nos dados de outra variável ou mesmo em
programas
• Limites são responsabilidade do programador
#include <stdio.h>
Exemplo
void main() {
int n[10];
printf("Leitura de 10 inteiros\n");
int cont;
for (cont = 0; cont < 10; cont++) {
scanf("%d", &n[cont]);
}
printf("Valores do vetor\n");
for (cont = 0; cont < 10; cont++) {
printf("%d", n[cont]);
}
}
Cadeias de caracteres – Strings
• Strings
• Em C, string é definida como uma matriz de caracteres
• Terminada por nulo: \0
• Constantes string
• "constante“
• \0 incluído pelo compilador
• char x[5]
• 4 caracteres
Definir sempre uma posição a mais para o fim de string (\0)
Funções para Strings
• Cabeçalho padrão <string.h>
• gets(s1): lê string do teclado (stdio.h)
• strcopy(s1, s2): copia s1 em s2
• strcat(s1, s2): concatena s2 ao final de s1
• strlen(s1): tamanho de s1
• strcmp(s1, s2): compara strings
• 0 se iguais, negativo se s1<s2, positivo se s1>s2
Funções para Strings
• getfs tem problemas quanto ao fim da string
• Não controla o tamanho, pode aceitar uma string maior do
que o declarado
• scanf tem o mesmo problema
• scanf(“%s”, s1)
• Usar função fgets no lugar
• fgets(var, tamanho, stdin)
• fgets(s1, 10, stdin)
Exemplo
#include <stdio.h>
#include <string.h>
void main() {
char s1[10], s2[10];
leandro@utfpr.edu.br
http://lapti.ct.utfpr.edu.br