Você está na página 1de 16

Universidade Estadual do Rio de Janeiro

Instituto de Matemtica e Estatstica


Departamento de Informtica e Cincias da Computao
Linguagem de Programao I
Ponteiros e Matrizes Multidimensionais
Professor: Joo Paulo
id29818187 pdfMachine by Broadgun Software - a great PDF writer! - a great PDF creator! - http://www.pdfmachine.com http://www.broadgun.com
Ponteiros e Matrizes
Multidimensionais
Ponteiros e matrizes
multidimensionais
Vimos que uma vez que matrizes
unidimensionais podem ser representadas por
um ponteiro (o nome da matriz) e por um
deslocamento (incremento), razovel
imaginar que uma matriz multidimensional
pode ser representada com uma notao
ponteiro equivalente.
Uma matriz bidimensional , na realidade, uma
coleo de matrizes unidimensionais.
Podemos defini-la como um ponteiro para um
grupo de matrizes unidimensionais contguas.
Ponteiros e matrizes
multidimensionais
Declarao
tipo (*ptr)[expr2]
Ao invs de: tipo matriz [expr1][expr2]
Generalizao
tipo (*ptr)[expr2][expr3]...[exprn]
Que substitui: tipo matriz [expr1]
[expr2] ... [exprn]
Ponteiros e matrizes
multidimensionais
Exemplo: suponha que x seja uma matriz
inteira bidimensional com 10 linhas e 20
colunas. Podemos declarar x como
int (*x)[20]
Ao invs de: int x[10][20]
Na primeira declarao x definido como um
ponteiro para (elementos que so) matrizes
inteiras unidimensionais de tamanho 20
contguos.
Ponteiros e matrizes
multidimensionais
...
...
...
x
x+1
x+9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Este elemento pode ser acessado por *(*(x+1)+5)
Ponteiros e matrizes
multidimensionais
Como podemos acessar, por exemplo, o item na linha 1, coluna 5?
x[1][5]
ou
*(*(x+1)+5)
Primeiro, (x+1) um ponteiro para a linha 1. Portanto, o objeto
desse ponteiro, *(x+1), refere-se linha inteira. Como a linha 1
uma matriz unidimensional, *(x+1) , na realidade, um ponteiro
para o primeiro elemento da linha 1. Adicionamos 5 a esse
ponteiro. Por isso, (*(x+1)+5) um ponteiro para o elemento 5
(na realidade o sexto elemento) da linha 1. O objeto desse
ponteiro *(*(x+1)+5).
Exemplo
#include <stdio.h>
#include <conio.h>
int main()
{
int x[10][20];
int (*pt_matriz)[20];
int i,j;
for (i=0; i<10; i++)
for (j=0; j<20; j++)
x[i][j] = i + j;
pt_matriz = x;
j=0;
for (i=0; i<10; i++){
printf("Valor de x[%d][%d]= %d.\n",i,j,*(*(pt_matriz+i)+j));
j++;
}
getch ( );
return(0);
}
Matrizes de Ponteiros
Uma matriz multidimensional pode ser expressa
como uma matriz de ponteiros em vez de um
ponteiro para um grupo de matrizes contguas.
Notao
tipo *matriz[expr1];
Ao invs da definio anterior
tipo (*matriz)[expr2];
E tambm ao invs da definio convencional
tipo matriz[expr1][expr2];
notar a
diferena
Matrizes de Ponteiros
Notao
tipo *matriz[expr1];
Observe que o nome da matriz e o asterisco
no esto entre parntesis.
...
...
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
X[0]
X[1]
X[9]
Matrizes de Ponteiros
Esse elemento pode ser acessado por *(x[1]+5)
Mais Sobre Declarao de
Ponteiros
Declaraes de ponteiros podem ser
complicadas e necessrio algum cuidado
na sua interpretao, principalmente nas que
envolvem funes e matrizes.
Uma das dificuldades o uso de parntesis
que tem duas utilidades
Indicar funes
Indicar precedncia
Mais Sobre Declarao de
Ponteiros
O que significa int *p(int a)?
Uma funo que aceita um argumento int e
retorna um ponteiro para int.
O que significa int (*p)(int a)?
Um ponteiro para uma funo que aceita um
argumento inteiro e retorna um inteiro
Primeiro par de parntesis = precedncia (ou
aninhamento)
Segundo par de parntesis = funo
Mais Sobre Declarao de
Ponteiros
O que significa int *(*p)(int(*a)[])?
Um ponteiro para uma funo que aceita um
ponteiro para uma matriz de inteiros como
argumento e retorna um ponteiro para um int.
O que significa int (*p)(char(*a)[])?
p um ponteiro para uma funo que aceita um
ponteiro para uma matriz de caracteres como
argumento e retorna um valor inteiro.
Mais Sobre Declarao de
Ponteiros
O que significa int *(*p)(char *a[])?
p um ponteiro para uma funo que aceita uma
matriz de ponteiros para caracteres como
argumento e retorna um ponteiro para inteiros.
O que significa int *(*p[7])(char a)?
p uma matriz de ponteiros (com 7 elementos)
para funes; cada funo aceita um caracter
como argumento e retorna um ponteiro para um
inteiro.
Mais Sobre Declarao de
Ponteiros
O que significa int (*p[7])(char a)?
p uma matriz de ponteiros (com 7 elementos)
para funes; cada funo aceita um caractere
como argumento e retorna um valor inteiro.
O que significa int *(*p[7])(char *a)?
p uma matriz de ponteiros (com 7 elementos)
para funes; cada funo aceita um ponteiro
para caractere como argumento e retorna um
ponteiro para um inteiro.

Você também pode gostar