• Nenhum resultado encontrado

CePAula02

N/A
N/A
Protected

Academic year: 2021

Share "CePAula02"

Copied!
9
0
0

Texto

(1)

ANHANGUERA ENSINO SUPERIOR

ANHANGUERA ENSINO SUPERIOR

Faculdades de Valinhos

Faculdades de Valinhos

-

-

FAV

FAV

Valinhos, agosto de 2006

Valinhos, agosto de 2006

Classifica

Classifica

ç

ç

ão e Pesquisa

ão e Pesquisa

Prof. Dr. Marcelo Augusto Cicogna

C&P

C&P --AULA 2AULA 2

2 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna

CONTE

CONTEÚ

ÚDO

DO

¾

¾

Nessa Aula

Nessa Aula

z

z Identificadores e PonteirosIdentificadores e Ponteiros

z

z Operadores * e &Operadores * e &

z

z DefiniDefiniçção e Declaraão e Declaraçção de Ponteirosão de Ponteiros

z

z Desmistificando alguns Conceitos da Linguagem CDesmistificando alguns Conceitos da Linguagem C

z

z Expressões com PonteirosExpressões com Ponteiros

z

z RelaRelaçção entre Ponteiros e Vetores/Matrizesão entre Ponteiros e Vetores/Matrizes

z

(2)

C&P

C&P --AULA 2AULA 2

3 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna ©

©2006 FAV 2006 FAV --ClassificaClassificaçção & Pesquisaão & Pesquisa..

MOTIVA

MOTIVA

ÇÃO

Ç

ÃO

¾

¾ Funcionamento do ExcelFuncionamento do Excel ¾¾ No ExcelNo Excel As c

As céélulas são identificadas por lulas são identificadas por coordenadas coluna/linha.

coordenadas coluna/linha.

Exemplo:

Exemplo:

C

Céélula lula B2B2 possui o valor 10possui o valor 10 C

Céélula lula B3B3 possui o valor 20possui o valor 20

¾

¾ Em linguagem CEm linguagem C

Os identificadores são compostos

Os identificadores são compostos

por nomes definidos pelo

por nomes definidos pelo

usu

usuáário.rio. Exemplo:

Exemplo:

int a =

int a = 1010;;

Mas o identificador a possui um

Mas o identificador a possui um

endere

endereçço na memo na memóória?ria?

?

?

C&P

C&P --AULA 2AULA 2

4 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna

MOTIVA

MOTIVA

ÇÃO

Ç

ÃO

¾

¾ EndereEndereçço de uma vario de uma variáávelvel ¾¾ Suponha as variáSuponha as variáveis em Cveis em C 3 vari

3 variááveis:veis:

int int a, b, c;a, b, c; a = a = 1010;; b = b = 2020;; c = a + b = c = a + b = 3030;; ¾

¾ EndereçEndereço das vario das variáveisáveis Fazendo um paralelo com o

Fazendo um paralelo com o

Excel, a forma

Excel, a formaçção de endereão de endereçços os segue a nota

segue a notaçção Coluna/Linha:ão Coluna/Linha:

End

End(a) = B2;(a) = B2; End

End(b) = B3;(b) = B3; End

End(c) = B4;(c) = B4;

¾

¾ ManipulaçManipulação de endereão de endereççosos Cont

Cont(B4) = (B4) = ContCont(B2) + (B2) + ContCont(B3); (B3); Resultado:

(3)

C&P

C&P --AULA 2AULA 2

5 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna ©

©2006 FAV 2006 FAV --ClassificaClassificaçção & Pesquisaão & Pesquisa..

ENDERE

ENDEREÇ

ÇOS DE MEM

OS DE MEMÓ

ÓRIA

RIA

¾

¾ EndereEndereçços em Cos em C

Em linguagem C, todo

Em linguagem C, todo

identificador possui um

identificador possui um

endere

endereçço de memo de memóória.ria. Identificadores são

Identificadores são

usados para representar

usados para representar

vari

variááveis, constantes e veis, constantes e fun

funçções.ões.

Suponha, por enquanto,

Suponha, por enquanto,

que

que endereendereççosos em em linguagem C sejam

linguagem C sejam

iguais a representa

iguais a representaçção ão de

de coordenadascoordenadasdas das c

céélulas de uma planilha lulas de uma planilha Excel (B1, B2, etc.) Excel (B1, B2, etc.) ¾ ¾ ExemploExemplo int int a, b;a, b; a = a = 1010;; b = b = 2020;; ¾

¾ IlustraçIlustração:ão:

10

B2

a

20

B3

b

Valor de

“a”

(conteúdo = 10)

Endereço de

“a”

(memória = B2)

C&P

C&P --AULA 2AULA 2

6 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna

ENDERE

ENDEREÇ

ÇOS DE MEM

OS DE MEMÓ

ÓRIA

RIA

¾

¾ EndereEndereçços em Cos em C Os endere

Os endereçços são os são

representados por

representados por

n

núúmeros em base meros em base hexadecimal

hexadecimal..

Vamos fazer a mesma

Vamos fazer a mesma

analogia de endere

analogia de endereçços os das c

das céélulas de uma lulas de uma planilha Excel (B1, B2,

planilha Excel (B1, B2,

etc.)

etc.) mas, agora, com mas, agora, com

valores em

valores em hexadecimalhexadecimal ¾ ¾ ExemploExemplo int int a, b;a, b; a = a = 1010;; b = b = 2020;; ¾

¾ IlustraçIlustração:ão:

10

FFF2

a

Valor de

“a”

(conteúdo = 10)

Endereço de

“a”

(memória = FFF2)

20

b

FFF4 www.numaboa.com.br/informatica/oiciliS/assembler/textos/binHexPort.php

(4)

C&P

C&P --AULA 2AULA 2

7 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna ©

©2006 FAV 2006 FAV --ClassificaClassificaçção & Pesquisaão & Pesquisa..

ENDERE

ENDEREÇ

ÇOS DE MEM

OS DE MEMÓ

ÓRIA

RIA

¾

¾ Operador &Operador &

Em linguagem C, o

Em linguagem C, o

operardor

operardor&& permite permite determinar o endere

determinar o endereçço o de uma vari

de uma variáável.vel. ¾

¾ ExemploExemplo int

int a = a = 1010;; printf

printf((““%d%d””, &a);, &a); printf

printf((““%x%x””, &a);, &a);

¾ ¾ Exemplo:Exemplo: #include <stdio.h> int main() { int a = 10; /* O conteúdo da variavel a. */

printf("Conteudo: %d\n", a);

/* O endereço da variavel a (int). */

printf("Endereco: %d\n", &a);

/* O endereço da variavel a (hexa). */

printf("Endereco: %x\n", &a);

return (0); }

Aula8_01

&a retorna algo como FFF4

!

!

C&P

C&P --AULA 2AULA 2

8 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna Ilustração

ENDERE

ENDEREÇ

ÇOS DE MEM

OS DE MEMÓ

ÓRIA

RIA

¾

¾ ManipulaManipulaçção de ão de Endere

Endereççosos

Em linguagem C, uma

Em linguagem C, uma

vari

variáável do tipo vel do tipo intint pode pode armazenar endere

armazenar endereçços de os de mem

memóória (porria (poréém, alguns m, alguns compiladores apontarão compiladores apontarão um um warningwarning). ). ¾ ¾ ExemploExemplo int int a, b;a, b; a = a = 1010;; b = &a; b = &a; ¾ ¾ Exemplo:Exemplo: #include <stdio.h> int main() { int a = 10; int b; b = &a; /* O conteúdo da variavel b. */ printf("Conteudo: %d\n", b);

/* O endereço da variavel b (hexa). */

printf("Endereco: %x\n", &b);

return (0); } Aula8_01

10

FFF2

a

FFF2

FFF4

b

(5)

C&P

C&P --AULA 2AULA 2

9 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna ©

©2006 FAV 2006 FAV --ClassificaClassificaçção & Pesquisaão & Pesquisa..

PONTEIROS

PONTEIROS

¾

¾ DeclaraDeclaraçção: Operador *ão: Operador * Tipo

Tipo* Nome_Ponteiro;* Nome_Ponteiro;

Em linguagem C, para

Em linguagem C, para

poder armazenar

poder armazenar

endere

endereçços de memos de memóória, ria, recomenda

recomenda--se utilizar se utilizar ponteiros ponteiros. . ¾ ¾ ExemploExemplo int int a = a = 1010; ; int int* b;* b; b = &a; b = &a; ¾ ¾ Exemplo:Exemplo: #include <stdio.h> int main() { int a = 10; int* c; c = &a;

/* O conteúdo da variavel c (hexa). */

printf("Conteudo: %x\n", c); return (0); } Aula8_01 Ilustração

10

FFF2

a

FFF2

FFF4

b

Ponteiros são variPonteiros são variááveis que veis que armazenam em seu conte

armazenam em seu conteúúdo do apenas endere

apenas endereçços (os (HexaHexa).).

!

!

C&P

C&P --AULA 2AULA 2

10 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna

PONTEIROS

PONTEIROS

¾

¾ Acesso: Operador *Acesso: Operador * Pode

Pode--se acessar o se acessar o

conte

conteúúdo que um do que um ponteiro possui tamb

ponteiro possui tambéém m atrav

atravéés do operador s do operador ** ¾ ¾ ExemploExemplo int int a = a = 1010; ; int int* c;* c; c = &a; c = &a; (*c) = (*c) = 2020; ; ¾

¾ Paralelo com o ExcelParalelo com o Excel a = 10; a = 10; End(c) = End(a); End(c) = End(a); Cont Cont(c) = 20;(c) = 20; ¾ ¾ Exemplo:Exemplo: #include <stdio.h> int main() { int a = 10; int* c; /* O conteúdo da variavel a. */

printf("Conteudo: %d\n", a);

c = &a; (*c) = 20;

/* O conteúdo da variavel a. */

printf("Conteudo: %d\n", a);

return (0); }

Aula8_01

int* c armazena algo como FFF4 (*c) acessa o cont. do endereço

!

!

Ilustração

10

FFF2

a

FFF2

FFF4

c

20

(6)

C&P

C&P --AULA 2AULA 2

11 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna ©

©2006 FAV 2006 FAV --ClassificaClassificaçção & Pesquisaão & Pesquisa..

DESMISTIFICANDO...

DESMISTIFICANDO...

¾

¾ FunFunçção ão scanfscanf() e &() e & Foi dito no in

Foi dito no iníício do cio do curso que as fun

curso que as funçções ões scanf

scanf()() e e fscanffscanf()() necessitavam de um

necessitavam de um

operador

operador && na passagem na passagem

de vari

de variááveis para leitura. veis para leitura. ¾

¾ ExemploExemplo int

int a = a = 1010; ; scanf

scanf((““%d%d””, &a); , &a); Motivo:

Motivo: a funa funçção ão scanfscanf()() necessita de um

necessita de um

endere

endereççoo para alterar o para alterar o

conte

conteúúdodode uma de uma vari

variáável. vel.

¾ ¾ Exemplo:Exemplo: #include <stdio.h> int main() { int a = 10; /* Sem &. */ scanf(”%d”, a);

printf("Conteudo: %d\n", a);

/* Com &. */

scanf(”%d”, &a);

printf("Conteudo: %d\n", a);

return (0); }

Aula8_02

C&P

C&P --AULA 2AULA 2

12 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna

DESMISTIFICANDO...

DESMISTIFICANDO...

¾

¾ Vetores são Ponteiros!Vetores são Ponteiros! Em linguagem C, o

Em linguagem C, o

identificador

identificador de um de um vetor

vetor criado, por criado, por

exemplo, como vetor de

exemplo, como vetor de

inteiros:

inteiros:

int

int vetvet[[33] = {] = {11, , 22, , 33}; };

é

é, internamente, , internamente,

representado como um

representado como um

ponteiro

ponteiro para o para o

endere

endereçço da o da primeiraprimeira posi

posiççãoãodo vetor. do vetor. int*

int* vetvet; ;

1

A1

2

B1

3

C1

1

FFF2

2

FFF4

3

FFF6 ¾

¾ IlustraçIlustração (Excel):ão (Excel):

¾

¾ IlustraçIlustração (em C):ão (em C):

A1

A2

vet

FFF2

FFF8

vet

O que O que signifcasignifca (

(vetvet + 2)+ 2)??

?

(7)

C&P

C&P --AULA 2AULA 2

13 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna ©

©2006 FAV 2006 FAV --ClassificaClassificaçção & Pesquisaão & Pesquisa..

DESMISTIFICANDO...

DESMISTIFICANDO...

¾

¾ Chamada por ReferênciaChamada por Referência Exemplo 1:

Exemplo 1:passagem de um passagem de um parâmetro inteiro

parâmetro inteiro nnpor por

referência

referência

O escopo da fun

O escopo da funçção possui ão possui uma referência ao escopo

uma referência ao escopo

externo que a chamou.

externo que a chamou.

Com essa referência pode

Com essa referência pode- -se alterar o valor da

se alterar o valor da

vari

variáável do escopo externo, vel do escopo externo,

atrav

atravéés do uso de ponteiros.s do uso de ponteiros.

#include <stdio.h> void Imprime_linhas(int* n); int main() { int a = 5; Imprime_linhas(&a);

printf(“\tPrograma Teste”); Imprime_linhas(&a); return (0); } void Imprime_linhas(int* n) { int i;

for (i=0; i<(*n); i++)

printf(“\n---\n”); (*n) = 1; } Aula6_03B ¾ ¾ Exemplo:Exemplo: C&P

C&P --AULA 2AULA 2

14 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna

PONTEIROS E VETORES

PONTEIROS E VETORES

¾

¾ Indexando vetores a Indexando vetores a ponteiros

ponteiros

Matrizes e ponteiros tem uma

Matrizes e ponteiros tem uma

estreita liga

estreita ligaçção.ão. char char strstr[[4040];]; char char* p;* p; char char a;a; ƒ ƒ p = p = strstr;; O ponteiro p foi

O ponteiro p foi inicializadoinicializadocom com o endere

o endereçço do vetor o do vetor strstr..

ƒ

ƒ a = a = strstr[4];[4]; a = *(p+4);

a = *(p+4);

As duas linhas de comandos são

As duas linhas de comandos são

equivalentes. equivalentes. ¾ ¾ Exemplo:Exemplo: #include <stdio.h> int main() { int i; char str[10]; char* p; strcpy(str, “Aprovado”); p = str;

for(i=0; i<str[i]; i++) printf(“%c", str[i]); printf(“\n”); for(i=0; (*p); i++, p++) printf(“%c", (*p)); return (0); } Aula8_03

Embora o nome de um vetor

Embora o nome de um vetor

(matriz) seja um ponteiro, seu

(matriz) seja um ponteiro, seu

endere

endereçço o nãonão pode ser alterado.pode ser alterado.

!

(8)

C&P

C&P --AULA 2AULA 2

15 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna ©

©2006 FAV 2006 FAV --ClassificaClassificaçção & Pesquisaão & Pesquisa..

PONTEIROS E VETORES

PONTEIROS E VETORES

¾

¾ Chamada por referênciaChamada por referência A passagem de um

A passagem de um

parâmetro

parâmetro vetvet[10][10]que que representa de um vetor de

representa de um vetor de

inteiros com 10 elementos.

inteiros com 10 elementos.

Ao passarmos um vetor (ou

Ao passarmos um vetor (ou

uma matriz) como

uma matriz) como

argumento para uma

argumento para uma

fun

funçção estamos fazendo ão estamos fazendo uma chamada por

uma chamada por

referência

referência. .

Isto significa que as

Isto significa que as

altera

alteraçções ocorridas nos ões ocorridas nos parâmetros dentro da

parâmetros dentro da

fun

funçção ão afetarãoafetarãoos valores os valores das vari

das variááveis passadas veis passadas como argumento.

como argumento.

#include <stdio.h>

void Imprime(int vet[10]); int main()

{

int i, x[10];

for(i=0; i<10; i++) x[i] = i; Imprime(x);

Imprime(x); /*Novos valores*/

return(0); }

void Imprime(int vet[10]) {

int i;

for(i=0; i<10; i++)

printf(“%2d ”, vet[i]); printf(“\n”);

for(i=0; i<10; i++) vet[i] *= -1; } Aula6_07 ¾ ¾ Exemplo:Exemplo: C&P

C&P --AULA 2AULA 2

16 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna

EXPRESSÕES COM PONTEIROS

EXPRESSÕES COM PONTEIROS

¾

¾ AritmAritméética: Aditica: Adiçção e Subtraão e Subtraççãoão Pode

Pode--se incrementar ou se incrementar ou decrementardecrementar um ponteiro usando os operadores

um ponteiro usando os operadores

++ ++ ee–– ¾ ¾ ExemploExemplo int int a = a = 1010; ; int int* c;* c; c = &a; c = &a; c++; c++; c c----;; c = c + 2; c = c + 2; Ilustração

10

A1

a

A1

C1

c

A2

C1

c

A1

C1

c

A3

C1

c

CUIDADO!

CUIDADO!

(9)

C&P

C&P --AULA 2AULA 2

17 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna ©

©2006 FAV 2006 FAV --ClassificaClassificaçção & Pesquisaão & Pesquisa..

EXPRESSÕES COM PONTEIROS

EXPRESSÕES COM PONTEIROS

¾

¾ InicializaInicializaçção de Ponteiros ão de Ponteiros Cuidado

Cuidado: nenhum ponteiro pode ser usado : nenhum ponteiro pode ser usado antes de ser inicializado.

antes de ser inicializado.

¾

¾ Erro ComumErro Comum int int a;a; int int* p; * p; a = a = 1313; ; (*p) = a; (*p) = a; ¾

¾ Importante: Importante: o programa acima sero programa acima seráá compilado e executado. Por

compilado e executado. Poréém, os m, os resultados são imprevis

resultados são imprevisííveis!veis!

C&P

C&P --AULA 2AULA 2

18 Pr of . D r. Ma rcelo Augusto Cicogna Pr of . D r. Ma rcelo Augusto Cicogna

EXPRESSÕES COM PONTEIROS

EXPRESSÕES COM PONTEIROS

¾

¾ Exemplos de expressões Exemplos de expressões int int* p; * p; ƒ ƒ p++;p++; Incrementa o endere Incrementa o endereçço de p o de p na mem

na memóóriaria

ƒ

ƒ (*p)++;(*p)++;

Incrementa o conte

Incrementa o conteúúdo de p do de p na mem

na memóóriaria

ƒ

ƒ *(p++);*(p++);

Incrementa o endere

Incrementa o endereçço de p o de p na mem

na memóória e retorna o ria e retorna o

conte

conteúúdo desta posido desta posiçção.ão.

¾ ¾ Exemplo:Exemplo: #include <stdio.h> int main() { int x, y = 0; int* p; p = &y; x = (*p); x = 4; (*p)++; x--; (*p) = (*p) + x;

printf(“y = %d\n", y);

return (0); }

Referências

Documentos relacionados

Sendo assim diante das analises que foram realizadas através das leituras tidas, para o discorrer deste trabalho, ficou entendido que foi preciso lutar para que a capoeira tivesse

Apesar de os judeus de São Paulo constituírem basicamente uma população de imigrantes ou descendentes de imigrantes provenientes de diversos países, atualmente é Israel, muito mais

Assim, vislumbra-se que há um direcionamento para aceitação e até mesmo regulação da atividade de mãe social. Entende-se, portanto, como falsa a ideia de que os

Naturalmente nem todos os jovens podem jogar na equipas de “Competição” assim cabe à “Geração Benfica” garantir que os jovens que não tiveram possibilidade (por critérios

O processo foi o seguinte: gerar todos os grafos com 10 vértices eliminando grafos de grau máximo ímpar, grafos overfull e grafos neighborhood overfull; gerar o

Dessa maneira, faziam-se reconhecer por seus pares, entre outras estratégias, comportando-se nos moldes da nobreza da Corte portuguesa, além do fato de ostentar insígnias e símbolos

apresentados e explicados apenas os padrões para o escoamento vertical ascendente, os quais são: bolhas dispersas, golfadas, caótico (churn) e anular,

405 Embrapa Meio Norte A análise estatística das variáveis de crescimento e produção da cultura do arroz vermelho Tabela 4, aos 180 dias após a semeadura DAS, revelou