Fundamentos1 SlidesC15 2008-09-30

download Fundamentos1 SlidesC15 2008-09-30

of 12

Transcript of Fundamentos1 SlidesC15 2008-09-30

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    1/12

    Fundamentos de Programao 1

    Slides 15

    Prof. SIMO

    Jean Marcelo SIMO

    Linguagem CAtribuio, Aritmtica eComparao de Ponteiros

    - Vetores e Ponteiros.

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    2/12

    Atribuio de Ponteiros.

    #include #include

    void main ()

    {

    int x = 3;

    int *p1, *p2;

    p1 = &x;

    p2 = p1;

    printf (" O endereo da varivel x %p. \n", p2 );

    system ("Pause");

    return 0;

    }

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    3/12

    Memria

    Pilha

    Heap

    Variveis Globais

    Cdigo do Programa

    Um mapa conceitual da memria

    de um programa em C.

    Memria Voltil de

    acesso aleatrio (RAM)

    Memria Permanente

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    4/12

    Variveis em C

    8Aproximadamente 10 dgitos de precisodouble

    0-void

    10Aproximadamente 10 dgitos de precisolong double

    4Aproximadamente 6 dgitos de precisofloat

    4-4.294.967.296 a 4.294.967.296long int20 a 65.535unsigned int

    1-128 a 127short int

    2-32.768 a 32.767int

    10 a 255char

    Total de BytesUtilizados

    VariaoTipo de dados

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    5/12

    Aritmtica de Ponteiro

    3005

    3004

    3003

    3002

    30013000CH

    CH + 1

    CH + 2

    CH + 3

    CH + 4

    CH + 5

    INTEIRO

    INTEIRO + 1

    void main (){

    char *CH;CH = 3000;printf (" O endereo apontado por ch %p. \n", ch );CH = CH + 1;printf (" O endereo apontado por ch %p. \n", ch );CH = CH + 1;printf (" O endereo apontado por ch %p. \n", ch );

    }

    Endereos de Memria.

    void main (){

    int *INTEIRO;INTEIRO = 3000;printf (" O endereo apontado por INTEIRO %p. \n", INTEIRO );INTEIRO = INTEIRO + 1;printf (" O endereo apontado por INTEIRO %p. \n", INTEIRO );INTEIRO = INTEIRO + 1;

    printf (" O endereo apontado por INTEIRO %p. \n", INTEIRO );}

    INTEIRO + 1

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    6/12

    Vetores e Ponteiros#include #include int main(){ // Define e inicializa uma string.

    char str [80] = "Universidades";// Um ponteiro chamando Pont para caractere.char *Pont;// O ponteiro Pont recebe o endereo da primeira posio da str.// O nome de um string sozinho sempre o endereo da primeira posio.// Obs.: Neste caso, no necessrio &.

    Pont = str;

    // Enquanto o contedo do ponteiro no for \0.while ( *Pont != '\0'){

    putchar (*Pont);// Aritmtica de ponteiros

    Pont = Pont + 1;}printf("\n");

    Pont = str;

    // O ponteiro que aponta para o primeiro elemento de uma string pode ainda se

    // comportar como um vetor!!!!int idx = 0;while( Pont[idx] != '\0 ){

    putchar( Pont[idx] );idx = idx + 1;

    }printf("\n");system("Pause");return 0;

    }

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    7/12

    #include #include int main(){ // Define e inicializa uma string.

    char str [80] = "Universidades";// Um ponteiro chamando Pont para caractere.char *Pont;// O ponteiro Pont recebe o endereo da primeira posio da str.// O nome de um string sozinho sempre o endereo da primeira posio.// Obs.: Neste caso, no necessrio &.

    Pont = str;

    // Enquanto o contedo do ponteiro no for \0.while ( *Pont ){

    putchar (*Pont);// Aritmtica de ponteiros

    Pont = Pont + 1;}printf("\n");

    Pont = str;

    // O ponteiro que aponta para o primeiro elemento de uma string pode ainda se

    // comportar como um vetor!!!!int idx = 0;while( Pont[idx] ){

    putchar( Pont[idx] );idx = idx + 1;

    }printf ("\n");system("Pause");return 0;

    }

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    8/12

    #include #include

    #define TAMANHO 5

    // cabealho de funo para empilhar nmero em um vetorvoid empilha ( int i );

    // cabealho de funo para desempilhar nmero em um vetorint desempilha ();

    // ponteiro para topo (fim) de vetorint *Topo;

    // ponteiro para base (incio) de vetorint *Base;

    // ponteiro para navegar sobre o vetor pilha via aritmtica de ponteirosint *Pont;

    // vetor para pilha (primeiro nmero a entrar ultimo a sair)int Pilha[TAMANHO];

    Exemplo - Pilha

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    9/12

    // funo principalint main(){

    int valor, cont = 0;

    // Isto significa que o ponteiro Base recebe o endereo de incio do vetor Pilha.// (Note que no h & comercial para receber o endereo quando se trata de um vetor!)// (Isto porque o prprio (nome do) vetor internamente implementado como ponteiro...)// (Isto , o nome do vetor um ponteiro)Base = Pilha;// O ponteiro Pont recebe o ponteiro BasePont = Base;

    // O ponteiro Topo recebe o endereo de fim do vetor PilhaTopo = Base + TAMANHO;

    // O programa em si.printf ("Programa para empilhar valores\n");do{

    printf ( "Digite um valor: (-1 para parar)\n );scanf ( "%d", &valor );if ( valor != -1 ){

    empilha (valor);cont = cont + 1;

    }} while ( valor != -1 );

    int i;for ( i = 0; i < cont; i = i + 1 ){

    valor = desempilha();printf("O %d o. valor desempilhado %d \n", i+1, valor);

    }

    system("Pause");return 0;

    }

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    10/12

    void empilha ( int i ){

    // Se o ponteiro Pont estiver apontando j para o topo// ento no se pode mais empilhar o nmero i

    if ( Pont == Topo ){

    printf ("Pilha cheia! \n");// sai do programaexit (1);

    }else

    {

    // A "varivel" apontada por Pont recebe o valor de i , i.e. a posio Pilha[0] recebe o valor de i.*Pont = i;

    // ponteiro Pont avana da sua posio inicial em 2 bytes (tamanho de um inteiro)// (i.e. Pont avana para seu endereo imediatamente superior)

    Pont = Pont + 1;

    }}

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    11/12

    int desempilha ( ){// varivel intermediriaint valor;

    // Se o ponteiro Pont estiver num endereo maior ou igual que o do Base, isto ,// Se ele tiver endereo maior ou igual que incio do Vetor Pilha...// ento se extrai a informao em uma varivel intermediria.if ( Pont >= Base ){

    // Ponteiro Pont aponta para seu endereo imediatamente inferiorPont = Pont - 1;

    // Valor recebe o valor da 'varivel' apontado por Pont.valor = *Pont;

    }else{

    printf ("Pilha vazia!\n");exit (1);

    }return valor;

    }

  • 7/24/2019 Fundamentos1 SlidesC15 2008-09-30

    12/12