Você está na página 1de 17

Computação 2

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];

fgets(s1, 10, stdin);


scanf("%s", s2);

int len1 = strlen(s1);


int len2 = strlen(s2);

printf("Comprimentos: %d %d \n", len1, len2);


printf("%s\n", s2);
}
Matrizes Bidimensionais

C suporta matrizes multidimensionais

Declaração de matriz de tamanho 10 x 20
– int d[10][20];
– d[1][2] = 3;

Armazenadas em uma matriz linha-coluna
– Primeiro índice é a linha, segundo é a coluna

Na realidade, índices de linha são “ponteiros” para o vetor da linha
Matrizes de Strings

Strings são vetores
– Matrizes unidimensionais

Declaração de uma matriz de 30 strings, com
comprimento máximo de 79 caracteres:
– char str_array[30][80];
– gets(str_array[2]);
● Ou gets(&str_array[2][0]);
Matrizes Multidimensionais

Cada compilador possui um limite para quantas dimensões são permitidas em matrizes
– Geralmente limites teóricos, como 21024-1

Declaração é uma extensão de matrizes bidimensionais
– tipo nome[tam1][tam2][tam3]...[tamN]

São usadas pouco frequentemente devido ao uso de memória
– E da necessidade de se reservar previamente essa memória
– Outras estruturas podem ser mais eficientes

Estruturas de dados dinâmicas

Bancos de dados
– Tempo de acesso a cada elemento também é mais lento
Obrigado

leandro@utfpr.edu.br
http://lapti.ct.utfpr.edu.br

Você também pode gostar