PROGRAMAÇÃO ESTRUTURADA II Profª. Noeli Ciência da Computação 1 PONTEIROS CIÊNCIA DA COMPUTAÇÃO Ponteiros A Linguagem C permite que o programador referencie a posição de objetos bem como os próprios objetos (isto é, o conteúdo de suas posições). CIÊNCIA DA COMPUTAÇÃO Ponteiros Por exemplo: Se x for declarado como um inteiro, &x se referirá à posição reservada para conter x. &x é chamado PONTEIRO. É possível declarar uma variável cujo tipo de dado seja um ponteiro e cujos possíveis valores sejam posições de memória. CIÊNCIA DA COMPUTAÇÃO Ponteiros Por exemplo: int *pi; float *pf; char *pc; pi é um ponteiro para inteiro; pf é um ponteiro para um número ponto flutuante; char é um ponteiro para um char; O asterisco indica que valores das variáveis declaradas são ponteiros para valores dos tipos especificados na declaração. CIÊNCIA DA COMPUTAÇÃO Ponteiros •Um ponteiro é como qualquer outro tipo de dado em C. •O valor de um ponteiro é uma posição de memória, da mesma forma que o valor de um inteiro é um número. •Os valores dos ponteiros podem ser atribuídos. Exemplo: pi = &x; CIÊNCIA DA COMPUTAÇÃO Ponteiros em C A notação *pi em C refere-se ao inteiro na posição referenciada pelo ponteiro pi. x = *pi; Atribui o valor deste inteiro à variável inteira x. CIÊNCIA DA COMPUTAÇÃO Aritmética com Ponteiros Se pi é um ponteiro para um inteiro, então pi + 1 é o ponteiro para o inteiro imediatamente seguinte ao inteiro *pi na memória. pi – 1 é o ponteiro para o inteiro imediatamente anterior a *pi; pi + 2 é o o ponteiro para o segundo inteiro depois de *pi e assim por diante; CIÊNCIA DA COMPUTAÇÃO Ponteiros Usaremos ponteiros para: •Passagem de parâmetros para funções; •Alocação dinâmica de memória. CIÊNCIA DA COMPUTAÇÃO Exemplo 1 #include <stdio.h> #include <stdlib.h> void main() { int x; int *p1, *p2; p1 = &x; p2 = p1; printf("%p\n\n", p2); system("PAUSE"); } CIÊNCIA DA COMPUTAÇÃO Exemplo 2 #include <stdlib.h> #include<stdio.h> void main() { int *p, *q, a, b, c; printf("Digite dois numeros: \n"); scanf("%d %d", &a, &b); p = &a; q = &b; c = *p + *q; printf("variavel a: %d \n Endereço de memória: %p \n", a, p); printf("\n\nVariavel b: %d \n Endereço de memória: %p \n", b, q); printf("A soma e: %i \n\n",c); system("PAUSE"); } CIÊNCIA DA COMPUTAÇÃO