Ponteiros e matrizes

Propaganda
UNIVERSIDADE DO VALE DO RIO DOS SINOS – UNISINOS
CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS – CENTRO 6
Disciplina: Linguagem de Programação C
Prof ª Viviane Todt Diverio
Ponteiros e Matrizes
Ponteiros
Um ponteiro é um endereço de uma variável na memória. Uma variável ponteiro é uma
variável capaz de armazenar o endereço de outra.
& devolve o endereço do operando (ex.: uso na função “scanf”)
* usado para declarar um ponteiro ou devolver o conteúdo de um ponteiro
int *b
double *c
char *s
ponteiro para inteiro
ponteiro para double
ponteiro para caracter
Ex.:
char a;
char *b;
a=3;
b=&a;
printf(“%d”,*b);
Exercício:
Qual será o valor de count após a execução do seguinte código:
int x, *y,count;
x=100;
count=999;
y= &x;
count= *y;
________________________________________________________________________________
Matrizes
Matriz é o tipo de dado oferecido em “C” para montar coleções de dados do mesmo tipo.
Uma matriz precisa ser declarada da mesma maneira que uma variável qualquer de maneira
que o compilador possa conhecer o tipo da matriz e reservar espaço de memória suficiente para a
mesma.
Exs.:
int a[5];
double b[3][10];
matriz de uma dimensão (vetor) de cinco elementos (0 a 4)
matriz bidimensional: três linhas (0 a 2) e dez colunas (0 a 9)
Ponteiros e matrizes - 1
Acesso aos elementos de uma matriz:
a)
b)
através de índices:
a[5]=3;
b[2][8]=4.3;
através de ponteiros: na verdade, a declaração de uma matriz corresponde a
declaração de um ponteiro para uma área onde cabem tantos elementos do tipo
especificado quanto indicado. É mais rápido acessar as posições da matriz através de
ponteiros.
Podemos dizer que a declaração de uma matriz corresponde a:
int b[15]; significa int *b;
sendo que b aponta para uma área de 30 bytes
Sabendo disto, é possível acessar os elementos de uma matriz da seguinte forma:
void main()
{
int vet[15];
int *p;
int r;
for(r=0,p=vet;r<15;r++,p++)
printf(“%d %d\n”,vet[r],*p);
}
Um identificador de matriz é um ponteiro que inicialmente aponta para o primeiro elemento da matriz. Se esse
ponteiro for incrementado de um ele passa a apontar automaticamente para o próximo elemento da matriz.
É possível ter vários ponteiros apontando para uma mesma matriz.
Ponteiros e matrizes - 2
Exs.:
void main()
{
int vet[10];
int *aux, r;
for(aux=vet; aux<vet+10;aux++)
scanf(“%d”,aux);
for(r=0;r<10;r++)
scanf(“%d”,&vet[r]);
}
void main()
{
int mat[10][5];
int l,c;
for(l=0;l<10;l++)
for(c=0;c<5;c++)
scanf(“%d”,&mat[l][c]);
for(l=0;l<10;l++)
for(c=0;c<5;c++)
printf(“%d”,mat[l][c]);
}
Inicialização de matrizes:
Quando uma matriz é declarada como global ela pode ser inicializada na própria declaração.
Ex.:
int a[10]={1,2,3,4,5,6,7,8,9,10};
double b[3][3]={
{4.5,3.0,7.8},
{3.2,5.0,9.0},
{8.8,112.15,1003.9}
};
Exercícios:
1) Obter valores para um vetor de 8 posições do tipo double. Após, varrer o vetor imprimindo os
seus valores.
2) Fazer um programa que lê os valores de um vetor (matriz unidimensional) de 20 posições e
verifica quantas vezes o caracter `a` aparece.
3) Fazer um programa que lê os elementos de uma matriz de inteiros com número variável de linhas
e de colunas e, em seguida, devolve o maior e o menor elemento da matriz.
Ponteiros e matrizes - 3
Download