Escolar Documentos
Profissional Documentos
Cultura Documentos
Funções envolvidas:
• Por valor:
– visto na aula passada
– passa somente um valor.
– para cada parâmetro, é alocada uma área
de uso local da função e o valor do
argumento é copiado para esta área (valor
inicial).
– alterações deste valor, durante o
processamento da função, não alteram o
valor da variável enviada pelo programa que
chamou a função (argumento ou parâmetro
real), apenas a cópia local.
• Por referência:
– passa um endereço de memória, o qual é associado ao parâmetro,
localmente.
– alterações feitas no parâmetro afetam o conteúdo do endereço
referida na chamada (argumento ou parâmetro real).
– para passar parâmetros por referência precisamos usar
ponteiros.
A ideia de ponteiros
10 INF 01202 - Prof. Marcelo Walter – Aula 18
Ponteiros
Exemplos:
float *f; // f é um ponteiro para variáveis do tipo float
int *p; // p é um ponteiro para variáveis do tipo inteiro
char a, b, *p, c, *q; // pode declarar junto com variáveis de mesmo tipo
M a n PI
E 3.1415
Ó Z 1234
R 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 ...
I
A
ü O endereço de uma variável é sempre o MENOR dos endereços,
isto é, o endereço inicial.
ü Um ponteiro para um tipo qualquer indica também sempre o
número de bytes que esse tipo ocupa.
*a50f118 = ? Maria
&Joao= ? a43f77
count = 60;
q = *m; // recebe conteúdo apontado por m
return 0;
}
Exemplo:
int x = 200, *p1, *p2;
p1 = &x; // p1 aponta para x
p2 = p1; // p2 recebe p1 e também passa a apontar para x
printf("x - %d, p1=%p e p2=%p\n", x, p1, p2); // endereço de x
printf("x - %d, p1=%d e p2=%d\n",x,*p1, *p2); // conteúdo de x
#include <stdio.h>
int main()
{ a x y
int a, *x, *y; 20
10
a = 10;
x = &a;
y = x;
printf("a = %d, *x = %d, *y = %d \n",a,*x, *y);
printf("a = %d, x = %p, y = %p\n\n", a, x, y);
*x = 20;
printf("a = %d, *x = %d, *y = %d \n",a, *x, *y);
printf("a = %d, x = %p, y = %p\n\n", a, x, y);
return 0;
}
20 INF 01202 - Prof. Marcelo Walter – Aula 18
O que será impresso na tela?
#include <stdio.h>
int main()
{
int x=5,*px;
return 0;
}
#include <stdio.h>
int main()
{
float x;
int *p; Erro de compilação: tipos incompatíveis
p é um ponteiro para inteiros, logo não pode
x = 100; apontar para uma variável do tipo float.
p = &x;
printf("x=%f p=%p\n\n", x,p);
return 0;
}
#include <stdio.h>
int main()
{
int x; Possível erro de execução:
int *p; p não foi inicializado
quando p foi criado, ele aponta para um
x = 100; endereço de memória desconhecido.
*p = x; Resultado imprevisível!!!
printf("x=%d p=%p\n\n", x,p);
return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c; //parametros da equacao
float x1,x2; //raizes
puts("Entre os valores de a,b,c:");
scanf("%f%f%f", &a, &b, &c);
baskara(a, b, c, &x1, &x2); //chamada da funcao
printf("As raizes são %.5f e %.5f\n", x1, x2); //impressao das raizes
return 0;
}