Você está na página 1de 12

UniCEUB - LTP II Cincia da Computao Ponteiro

Prof. Antnio Barbosa Jnior

Tipo de dados em C
Tipos nativos
int, float, double, char e void modificadores : unsigned, signed, long, short

Vetor (array):
tipo nomeVariavelVetor [tamanho]

Ponteiro:
tipo *nomeVariavelPonteiro

Estrutura:
struct { campos } union { nomes }

Enumerao:
enum { nomes }

typedef

Principais finalidades de ponteiro


1. Fornecer os meios pelos quais as funes possam modificar seus parmetros;

2. So usados para suportar as rotinas de alocao dinmica;


3. O uso de ponteiro pode aumenta a eficincia de certas rotinas.

Ponteiro

(veja ponteiroDeclaraInicializa.cpp)

a varivel que contm o endereo de outra varivel. Recurso poderoso, mas perigoso! int i , // Declarao de varivel inteiro. *p ; // Declarao de varivel ponteiro. i = 5 ; // A varivel i recebe o valor 5. p = & i ; // O ponteiro p recebe o endereo da varivel i
Endereo de i

Endereos

2124 5 i
Identificadores

2128 2124 p

Ponteiro

(veja ponteiroDeclaraInicializa.cpp)

a varivel que contm o endereo de outra varivel. Recurso poderoso, mas perigoso! int i = 5, *p = & i; // Declara e inicializa.
Endereo de i

Endereos

2124 5 i
Identificadores

2128 2124 p

Ponteiros e arrays

(veja ponteiroVetor.cpp)

Um ponteiro e um array muitas vezes se confundem. Pois o nome de um array interpretado como o endereo do primeiro elemento do array. Por exemplo: int nome_array [3] = { 11, 22, 33 }; int *p, *q; p = nome_array; // p = & nome_array [0]; q = p; Aps esse cdigo, nome_array, p e q referem-se todos ao mesmo endereo de memria.

Ponteiros e arrays

(veja ponteiroVetor2.cpp)

De forma semelhante, ponteiros podem ser indexados como arrays: int vetor [10]; vetor [1] = 7; *(vetor+1) = 7; Entretanto, arrays e ponteiros no so a mesma coisa O ponteiro ocupa uma palavra de memria e um array, vrias. O array no pode mudar de endereo Qual o significado de p = vetor ? Qual o significado de vetor = p ?

Ponteiro e funo
O tipo de retorno de uma funo pode ser: Um tipo nativo: int, char, float, double, void; Um ponteiro (endereo) Se a funo avaliada e no passa por nenhum comando return, ento o valor retornado indefinido. Se a funo no retorna valores, pode-se usar void como tipo de retorno. Mesmo que a funo retorne um valor, esse no necessariamente usado por quem o chama: variavel = funcao_g ( 5 ); // O valor pode ser usado. funcao_g ( 5 ); // O valor no pode ser usado.

Ponteiro e funo
Lista de parmetros de uma funo semelhante declarao de variveis. Argumentos so passados por valor, exceo de arrays e structs que so passados por referncia. O argumento passado por valor equivalente a uma varivel local inicializada com o valor passado. Para alterar a varivel passada como argumento, usa-se ponteiros (passagem por referncia).

Exemplo 1

(veja ex1-passagemValorVariavel.cpp)

#include <stdio.h> void funcao (int i); int main ( ) { int j = 4; funcao (j); printf (Valor de j: %d\n, j); getchar (); } void funcao (int i) { i = 5; } Qual o valor de j no printf ( ) ?

Exemplo 2

(veja ex2-passagemVetor.cpp)

#include <stdio.h> void funcao (int i[]); int main () { int j[1] = { 4 }; funcao (j); printf (Valor de j[0]: %d\n, j[0]); getchar ( ); } void funcao (int i[]) { i[0] = 5; } Qual o valor de j [0] no printf ( ) ?

Exemplo 3

(veja ex3-passagemValorReferencia.cpp)

#include <stdio.h> void func (int *i); int main () { int j = 4; func ( & j ); // Chamada por referncia. printf (Valor de j: %d\n, j); getchar (); } void func (int *i) { *i = 5; //Atualiza contedo do endereo apontado por i } Qual o valor de j no printf ( ) ?