quarta-feira, 11 de setembro de 2013

Tornando constante o ponteiro ou a memória apontada

O código a seguir apresenta a diferença entre tornar constante o valor do ponteiro ou valor na memória por ele apontada.

#include <stdio.h>  // scanf(), printf() 
#include <stdlib.h> // calloc(), free()

int main()
{

// declarar constante o conteúdo da memória apontada, mas
// o ponteiro poderá ser alterado
    const int *x = (const int *) calloc( 1, sizeof(int) );

// aviso por modificar o conteúdo da memória apontada
    scanf("%d", x);

// erro por tentar modificar o conteúdo da memória apontada
//    *x = 3210;

// declarar constante o conteúdo do ponteiro, mas
// o conteúdo da memória apontada poderá ser modificado
    int * const w = (int * const) calloc( 1, sizeof(int) );

// erro por tentar alterar o ponteiro
//    w = x;

// modificando o conteúdo da memória apontada
    *w = 123456;

    printf("x: %d\n", *x );
    printf("w: %d\n", *w );

// modificando o ponteiro
    x = w;

    printf("x: %d\n", *x );

    free( (void*)x );
    free( (void*)w );

    return 0;
}


2 comentários:

Anônimo disse...

Nossa quando tenho duvidas é esse blogger que acesso te adoro professor abraços.
http://namiradanathynathalia.blogspot.com.br/?zx=638297f91189665a
acesse meu blogger passei aqui para tirar duvidas.
principalmente dos codigos

Anônimo disse...

Adoro esse blogger do senhor professor nas duvidas acesso para tirar duvidas beijos adoro o senhor.
http://egipcianathalia.blogspot.com.br/
http://namiradanathynathalia.blogspot.com.br/