A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.

Apresentações semelhantes


Apresentação em tema: "Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula."— Transcrição da apresentação:

1 Joaquim José Hangalo joajoshang@gmail.com

2  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula da memória possui um endereço (número inteiro de 32 bits). 1024 1025 1026 1027 1028 1029 1030 Uma variável declarada como ponteiro armazena um endereço de memória

3  Quando se cria uma variável de um determinado tipo no programa, ao executar o referido programa o Sistema Operativo reserva uma posição de memória  Mas ao invés de se utilizar o endereço da variável como referencia, utiliza-se o identificador (nome) atribuído à variável 1025 X10 1027 1028 1029 1030 int x = 10;

4  Definição  Ponteiros ou apontadores são tipos de variáveis que armazenam endereços de memória, possivelmente, endereços de memória de outras variáveis  Declaração ▪ tipo *identificador; Exemplos int *nota char *texto float *peso double *media

5  Existem dois operadores que são utilizados com ponteiros em C  & - Utilizado para obter o endereço de uma variável  * - Pode comportar-se de duas maneiras ▪ Quanto utilizado na declaração indica que a variável será um ponteiro ▪ Quando utilizado na manipulação das variáveis retorna o conteúdo do ponteiro. É utilizado para obter o conteúdo do endereço apontado

6  Exemplos  int *ptr, nota = 10;  ptr = &nota;  nota = *ptr;

7 #include main() { int x= 10, *pi; pi = &x; printf("&x: %p pi: %p\n", &x, pi); system("pause"); } Saida &x: 0028FF44 pi: 0028FF44 Os valores apresentados são endereços de memória O operador & quando aplicado sobre uma variável retorna o endereço desta variável

8 … main( ){ int *tmp_ptr; int x, y; x = 10; tmp_ptr = &x; // tmp_ptr aponta para x y = *tmp_ptr; //conteudo tmp_ptr=10; portanto, y = 10; }

9 … main( ){ int x, *px; float y, *py; double largura, *altura; x = 1; px = &x; /* px aponta para x */ *px =; /* conteudo de px = 0 (x=0) x= *px + 1; /* x = conteudo de px +1 */ }

10 #include main(){ int *a; int b = 2; int c; a = &b; c = b; printf("%d %d %d \n", *a, b, c); b = 3; printf("%d %d %d \n", *a, b, c); system ("pause"); } Saída 2 2 2 3 3 2

11 #include main(){ int h; /* inteiro h*/ int *x; /* ponteiro para inteiro, ainda nao inicializado*/ h = 5; /* valor atribuido a h */ x = &h; /* inicialização do ponteiro x*/ printf ("h= %i; &h = %i\n", h, &h); printf("&x = %i; *x = %i, x =%i \n", &x, *x, x ); } h -> conteudo de h &h -> endereco de há x -> endereco da variável que x está a apontar &x ->endereco do ponteiro x *x ->conteudo da variável que x está apontar

12 Os ponteiros são variáveis tipadas: possuem tipos diferentes para guardar endereços diferentes. Um ponteiro para um tipo de dado int possui representação diferente de um ponteiro para tipo de dados float. (int *) ≠ (float *) ≠ (char *)

13 … main() { int *ip, x; float *fp, z ip= &x; // OK fp = 6z; // OK ip = &z; // Erro fp = &x; // Erro }

14 Modificando valores de variáveis de forma indirecta através de ponteiros #include main(){ int x = 10; int *pi; pi = &x; /*pi aponta para o endereco de x -> *pi == 10*/ (*pi)++ /* conteudo de pi + 1 -> *pi == 11*/ printf("%d", x); system("pause"); } Saida ==> 11; Ao alterar *pi está-se a alterar o conteúdo de x

15 #include main(){ int x = 10; int *pi, *pj; pi = &x; //*pi = 10; pj = pi; // *pj = 10; (*pi)++; /* conteudo de pi + 1 -> (*pi, *pj, x) = 11*/ (*pj)++; /* conteudo de pj + 1 -> (*pi, *pj, x) = 12*/ printf("%d", x); /* == > 12*/ }

16  Se se tem 2 ponteiros p1 e p2 pode-se realizar operações aritméticas com eles:  p1 = p2 - desta foram p1 passa a apontar para o mesmo endereço que p2 aponta  *p1 = *p2 – desta forma faz-se com que o conteúdo da variável apontada por p1 tenha o mesmo valor do conteúdo da variável apontada por p2

17 int x = 10; int *ptr; ptr = &x; *ptr = ptr * x; printf(“%d”, *ptr); printf(“%d”, x); printf(“%d”, ptr); int x[3] = {1, 2, 3}; int *p; p = x; p[0]= p[1]= p[2]; printf(“%d\n”, p[1]); printf(“%d\n”, x[1]); printf(“%d\n”, p); Qual é a saída ?

18  Praticar a declaração e utilização de ponteiros  Definir e inicializar uma variável inteira  Definir um ponteiro para inteiro  Modificar o valor da variável através do ponteiro  Verificar os novos valores da variável utilizando printf


Carregar ppt "Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula."

Apresentações semelhantes


Anúncios Google