• Nenhum resultado encontrado

Estrutura de Dados

N/A
N/A
Protected

Academic year: 2022

Share "Estrutura de Dados"

Copied!
20
0
0

Texto

(1)

Estrutura de Dados

Passagem por Referência

(2)

Memória

0000 0008 0012

0016 0020 0021 0025 0029 Gasto de memória das

variáveis:

int: 4bytes char: 1byte float: 4bytes double: 8 bytes

double int / float

int/float int/float

char

int/float int/float

. . .

(3)

Memória

0000 0008 0012

0016 0020 0021 0025 0029

Endereço Valor

Identificadores

Declaração:

int x, y, z int *p;

p x y

z

(4)

Memória

0000 0008 0012

0016 0020 0021 0025 0029

Endereço Valor

Identificadores

Declaração:

int x, y, z int *p;

x = 10;

y = 20;

z = 30;

p = &y;

p x y

z

10 20

30 0016

(5)

Memória

0000 0008 0012

0016 0020 0021 0025 0029

Endereço Valor

Identificadores

Declaração:

int x, y, z int *p;

x = 10;

y = 20;

z = 30;

p = &x;

p x y

z

10 20

30 0012

(6)

Memória

0000 0008 0012

0016 0020 0021 0025 0029

Endereço Valor

Identificadores

Declaração:

int x, y, z int *p;

x = 10;

y = 20;

z = 30;

p = &x;

p++;

p x y

z

10 20

30 0016

(7)

Memória

0000 0008 0012

0016 0020 0021 0025 0029

Endereço Valor

Identificadores

Declaração:

int x, y, z int *p;

x = 10;

y = 20;

z = 30;

p = &x;

p++;

*p = *p + 10;

p x y

z

10 20

30 0016

*p = 30

(8)

Ponteiros

• Operadores unários

& *

&: serve para retornar o endereço de uma variável;

*: serve para obter o valor da variável que

está armazenada em determinado ponteiro;

(9)

Exemplo

int main() {

int x, y, *p;

x = 5;

y = 10;

p = &x;

*p += y;

printf(“%d”, x);

return 0;

}

p

x y

000 004 008

016 020 008

5

10 15

15

(10)

A passagem de parâmetros

• Toda função define um processamento a ser realizado.

• Este processamento pode depender ou não

dos valores dos parâmetros da função.

(11)

A passagem de parâmetros

• O mecanismo de informar os valores a serem processados pela função chama-se passagem de parâmetros.

• A Linguagem C define duas categorias de passagem de parâmetros:

passagem por valor e

passagem por endereço (ou passagem por referência).

(12)

A passagem de parâmetros

• Normalmente, a passagem de parâmetros a uma função é por valor.

• Mas, como os parâmetros de uma função são

variáveis locais, alguns aspectos devem ser

observados

(13)

Exemplo 1

void alterar(int x, int y, int z) {

printf(“Os valores recebidos %d %d %d\n”, x,y,z);

x++;

y++;

z++;

printf(“Os valores alterados %d %d %d\n”, x,y,z);

}

int main() {

int a = 1,b = 2,c = 3;

alterar(a, b, c);

printf(“Dados finais: %d %d %d\n”, a, b, c);

}

Resposta no quadro!

(14)

• Observe que os valores das variáveis a, b e c não foram modificados na função alterar.

Por quê?

• O tipo de passagem de parâmetros utilizado é por valor.

• Ou seja, são feitas apenas cópias dos valores

das variáveis a, b, e c nas variáveis x, y e z.

(15)

• Mas o que podemos fazer?

int int int alterar(int x, int y, int z) {

printf(“Os valores recebidos %d %d %d\n”, x,y,z);

x++;

y++;

z++;

return x,y,z;

}

Mas isso não é valido, pois a função em C não retorna vários valores!

(16)

Passagem por referência

• Mas, e se quisermos que a função modifique os valores das variáveis a, b e c passadas a ela como parâmetros?

• Neste caso, em vez de passar para a função os valores destas variáveis, é preciso passar os seus endereços.

• Como assim?

(17)

Exemplo 2

void alterar(int *x, int *y, int *z) {

printf(“Os valores recebidos %d %d %d\n”, *x,*y,*z);

(*x)++;

(*y)++;

(*z)++;

printf(“Os valores alterados %d %d %d\n”, *x,*y,*z);

}

int main() {

int a = 1,b = 2,c = 3;

alterar(&a, &b, &c);

printf(“Dados finais: %d %d %d\n”, a, b, c);

}

Resposta no quadro!

(18)

Passagem por referência

Considere uma variável declarada como:

int *x;

x é um ponteiro para int, ou seja, x é uma variável que armazena o endereço de uma variável do tipo int.

Considere agora que:

Neste caso, x armazena o valor 000.

x = &a;

Define-se *x, como sendo o valor contido na posição de memória apontada por x. Ou seja, *x vale 1.

(19)

Exercícios

• Criar um programa em C que realize a soma de dois números inteiros.

A soma tem que ocorrer uma função e a função não retorna nenhum valor;

Os parâmetros da função são os dois números passados por valor e um resultado passado por endereço.

(20)

Exercícios

• Criar um programa em C que realize a troca de valores entre duas variáveis.

A troca precisa ser realizada em uma função e a passagem de parâmetros precisa ser por referência.

Ex.

Inicio: a = 10, b = 5;

Final: a = 5, b = 10;

Dica: usar uma variável auxiliar

Referências

Documentos relacionados

Changes in the gut microbiota appears to be a key element in the pathogenesis of hepatic and gastrointestinal disorders, including non-alcoholic fatty liver disease, alcoholic

A polícia e as atividades de policiamento constituem fenômenos aparentemente nítidos nas sociedades modernas. Por isso, quando falamos em ‘polícia’ evocamos,

A baixa taxa de desconto ao longo dos anos de produção do campo, para o cálculo da função objetivo, aliada a baixa produção de água que a locação de

Este trabalho tem por objetivo estudar a viabilidade e a morfologia dos esporos, verificar o efeito de diferentes níveis de luz, pH e temperatura no processo

COMERCIAL, NATURAL DE SÃO PAULO - SP, RESIDENTE E DOMICILIADO NESTE DISTRITO, SÃO PAULO - SP, FILHO DE CARLOS MARTINS DOS SANTOS E DE DIVANETE FERNANDES DE OLIVEIRA; E LUCIENE GARCIA

dois gestores, pelo fato deles serem os mais indicados para avaliarem administrativamente a articulação entre o ensino médio e a educação profissional, bem como a estruturação

Não podem ser deduzidas dos nossos dados quaisquer informações sobre uma dada característica específica, nem sobre a aptidão para um determinado fim. Os dados fornecidos não eximem

(2019) Pretendemos continuar a estudar esses dados com a coordenação de área de matemática da Secretaria Municipal de Educação e, estender a pesquisa aos estudantes do Ensino Médio