Buscar

Linguagem C - PONTEIROS parte 1

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 = &nota;
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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais