Sunteți pe pagina 1din 13

Funes e Ponteiros

PROF. DR. JONATHAN DE ANDRADE SILVA


UFMS/CPPP
Funes - Passagem Referncia

Passagem de parmetros por referncia.


Na passagem por referncia no se passam para a funo os valores das
variveis, mas os endereos das mesmas.
Com o endereo da memria relacionado a uma varivel em questo, a
funo pode alterar diretamente o seu contedo. Essa alterao vai ser visvel
inclusive para o algoritmo que fez a chamada a funo.
Um exemplo a funo scanf. Em que passado uma varivel para que seja
alocado o valor que o usurio vai digitar. Essa varivel com o valor inserido
precisa estar acessvel ao programa que chamou, por exemplo a main.
Funes - Passagem Referncia

Considere a seguinte situao em que a passagem por referncia se faz


necessria.

O que vai ser


impresso?
Como resolver?
Funes - Passagem Referncia

Passagem de arrays (vetor ou matriz) como parmetros


No precisa utilizar o operador &.
Arrays so na verdade ponteiros
Necessrio um parmetro adicional, para informar o tamanho desse array.
Maneiras vlidas de declarar uma funo que recebe um vetor.
void imprime (int *vetor, int tamanho)
void imprime (int m[], int tamanho)
void imprime (int m[5], int tamanho)
Funes - Passagem Referncia

Para funes que recebem arrays, podemos ento utilizar ponteiros, ou


seja um ponteiro para um vetor ou matriz.

ponteiro v para o vetor

Faa uma funo para imprimir


os elementos do vetor!
Funes - Passagem Referncia

Quando declaramos um vetor, o Sistema Operacional (SO)


organiza todas as posio de maneira consecutiva na memria,
ou seja, um aps o outro.
Endereo Varivel Contedo
22FE30 vetor[0] 1
22FE34 vetor[1] 2
22FE38 vetor[2] 3
22FE3C vetor[3] 4
22FE40 vetor[4] 5
22FE44
22FE48
22FE4C n 899
Funes - Passagem Referncia

O nome da varivel que contm 5 inteiros (vetor) um ponteiro para a


primeira posio. Endereo Varivel Contedo

22FE30 vetor[0] 1
22FE34 vetor[1] 2
22FE38 vetor[2] 3

22FE3C vetor[3] 4

22FE40 vetor[4] 5
22FE44
22FE48
22FE4C n 899
Funes - Passagem Referncia

Dado o endereo inicial do vetor (posio 0), podemos manipular suas


posio utilizando aritmtica (+ e -) de ponteiros. Endereo Varivel Contedo
22FE30 vetor[0] 1
22FE34 vetor[1] 2
22FE38 vetor[2] 3

22FE3C vetor[3] 4

22FE40 vetor[4] 5
22FE44
22FE48
E para acessar o 22FE4C
contedo??
Funes - Passagem Referncia

Acessando o contedo do vetor com ponteiros.


Endereo Varivel Contedo

22FE30 vetor[0] 1
22FE34 vetor[1] 2
22FE38 vetor[2] 3

22FE3C vetor[3] 4

22FE40 vetor[4] 5
22FE44
22FE48
22FE4C
Funes - Passagem Referncia

Exerccio com ponteiro para vetores:


Implemente uma funo para ler um vetor de inteiros de 10
posies e inicialize com o valor 0.

Implemente uma funo para ler um vetor de inteiros de 10


posies e inicialize com o valores aleatrios de 0 a 100.

Implemente uma funo para imprimir o contedo do vetor de


10 posies.
Funes - Passagem Referncia

Para arrays com mais de uma dimenso (matriz), preciso especificar o


tamanho de todas as dimenses, exceto a primeira.
void imprime( int matriz[][5], int tamanho);
void imprime( int matriz[][5][7], int tamanho);
Funes

Exerccio
Escreva uma funo que recebe dois vetores de inteiros com tamanhos iguais
que trocam de valores entre si.
Exemplo: considere o vetor v1=[1,2,3] e o vetor v2=[2,3,4]
O programa deve trocar os valores de modo que o vetores fiquem com os valores:
v1=[2,3,4] e v2=[1,2,3];

Escreva uma funo que l um vetor de caracteres e cria outro vetor com o
contedo invertido.
Exemplo: ALGORITMO2 -> 2OMTIROGLA
Funes

Exerccios
Faa um programa que procure um caractere em um string e retorne o seu
endereo caso encontre, seno retorne NULL (ponteiro nulo).
Ex:
char* procura(char *str, char c){....}
char str[] = ufms2015;
procura(str, m);
Retorna o endereo do terceiro caractere do string &str[2]
Faa um programa para calcular a soma das diagonais de uma matriz 10x10
inicializada com valores aleatrios (utilizando o RAND)
Crie duas funes uma para inicializar a matriz e outra para calcular a soma.

S-ar putea să vă placă și