05/05/2014 Definição de Ponteiros PONTEIROS Curso: Ciência da Computação Luciana Balieiro Cosme Exemplo 1 int i=5; printf(“Valor da variavel: %d”, i); printf(“\nPonteiro da variavel:%d”,&i); Ponteiros Saída Valor da variavel: 5 Ponteiro da variavel: 2686748 Declaração int *p; float *q; O símbolo * indica que a variável é um ponteiro. São variáveis que armazenam um endereço de memória; Acessam o próprio endereço da memória e não seu conteúdo; Apontam para uma variável de um determinado tipo; O endereço de uma variável é dado pelo operador &. É um tipo especial de variável que armazena endereços; Pode ter o valor NULL; Se um ponteiro p armazena o endereço de uma variável i, podemos dizer "p aponta para i" ou "p é o endereço de i"; Nunca use um ponteiro que não foi inicializado. Exemplo 2 int a=3, b=2,c; int *p; /*p é um ponteiro para um inteiro*/ int *q; p = &a; /*o valor de p é o endereço de a */ q = &b; /* q aponta para b */ c = *p + *q; /* c recebe a soma de a + b */ printf(“%d”, c); 1 05/05/2014 Exemplo 3 int a=3, b=2, c; int *p; int **r; /* r é um ponteiro para um ponteiro para um inteiro */ p = &a; /* p aponta para a */ r = &p; /* r aponta para p e *r aponta para a */ c = **r * b; Exemplo 4: Troca o valor de duas variáveis void troca( int i, int j) { int temp; temp = i; i = j; j = temp; } Produz o valor desejado? printf("\n%d", c); Exemplo 4: Solução void troca( int *p, int *q){ int temp; temp = *p; *p = *q; *q = temp; } Vetores Os elementos de qualquer vetor têm endereços consecutivos na memória do computador; Exemplo: int v *v; = malloc( 10 * sizeof (int)); O ponteiro v aponta o primeiro elemento de um vetor de 10 elementos. <stdlib.h> troca( &i, &j); Vetores O endereço do segundo elemento do vetor é v+1 e o endereço do terceiro elemento é v+2; int i,*v; v = malloc( 100 * sizeof (int)); for (i = 0; i < 100; ++i){ v[i]=i; printf(" %d ", *(v+i)); Matrizes int **m; m = malloc( 10 * sizeof (int)); for(i=0;i<10;i++) m[i] = malloc( 10 * sizeof (int)); } 2 05/05/2014 Exercícios 1. Seja a seguinte seqüência de instruções em um programa C: int *pti; int i = 10; pti = &i; Qual afirmativa é falsa? a. pti armazena o endereço de i b. *pti é igual a 10 c. ao se executar *pti = 20; i passará a ter o valor 20 d. ao se alterar o valor de i, *pti será modificado e. pti é igual a 10 Leitura Complementar http://www.ead.cpdee.ufmg.br/cursos/C/c.html Exercícios 2. Faca um programa que multiplique duas matrizes. O programa deverá estar estruturado de maneira que: a- o usuário forneça as dimensões das matrizes ( o nº de col. da 1ª matriz deve ser igual ao nº de linhas da 2ª matriz); 2- uma função para alocar as matrizes dinamicamente; 3- uma função para ler as matrizes; 4- uma função para somar as matrizes; 5- uma função para apresentar a matriz na tela. Dúvidas? [email protected] 3