Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Introdução a Linguagem de Programação C - PONTEIROS Joaquim José Hangalo joajoshang@gmail.com 1 Memória do computador 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 Memória do computador 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 X 10 1027 1028 1029 1030 int x = 10; Ponteiros 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 Ponteiros - Operadores 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 Ponteiros - Operadores Exemplos int *ptr, nota = 10; ptr = ¬a; nota = *ptr; Ponteiros - Operadores #include <stdio.h> 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 Ponteiros - Operadores … 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; } Ponteiros - Operadores … 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 */ } Ponteiros - Operadores #include <stdio.h> 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 Ponteiros - operadores #include <stdio.h> 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 Ponteiros - Operadores 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 *) Ponteiros - Operadores … main() { int *ip, x; float *fp, z ip= &x; // OK fp = 6z; // OK ip = &z; // Erro fp = &x; // Erro } Ponteiros - Operadores Modificando valores de variáveis de forma indirecta através de ponteiros #include <stdio.h> 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 Ponteiros - Operadores #include <stido.h> 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*/ } Ponteiros - operadores 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 Ponteiros - operadores 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 ? Exercícios 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
Compartilhar