Enviado em 19/07/2015 - 14:35h
Boa tarde à todos;
#include <stdio.h>
int main()
{
int num1=10, num2=30, *p, *pc;
p=&num1;
pc=&num1;
printf ("\n\nValor: %d", *p);
printf ("\nEndereço: %p", p);
/* A OPERAÇÃO ABAIXO FARÁ O PONTEIRO ANDAR
* 15 POSIÇÕES NA MEMÓRIA; COMO ESTAMOS
* TRABALHANDO COM INTEIROS, E INTEIROS,
* NA ARQUITETURA DE 32BITS PESAM 4 BYTES,
* O PONTEIRO SE DESLOCARÁ 3C NA MEMÓRIA */
p+=15;
printf ("\n\nValor: %d", *p);
printf ("\nEndereço: %p", p);
printf("\n--------");
printf("\nInicialmente, o ponteiro apontava ");
printf("para o endereço %p", pc);
printf("\nComo andamos 15 posições, onde cada ");
printf("posição do inteiro vale 4bytes, ");
printf("\nandamos 15 x 4 = 60bytes que, ");
printf("em hexadecimal, equivale a 3C bytes.");
printf("\nLogo, %p + 3C = %p\n", pc, (pc+15));
/* AGORA, O PONTEIRO p, DEPOIS DE TER
* DESLOCADO 15 INTEIROS, PASSARÁ A TER
* O MESMO CONTEÚDO DA VARIÁVEL NUM2, OU
* SEJA, PASSARÁ A VALER 20; O MESMO
* PONTEIRO, DE 15 POSIÇÕES ANTERIORES,
* CONTINUARÁ APONTANDO PARA A VARIÁVEL
* NUM1 E CONTINUARÁ VALENDO 10 */
*p=num2;
printf("\n\n*(p-15) = %d, (p-15) = %p", *(p-15), (p-15));
printf("\n*p = %d, p = %p", *p, p);
printf("\n--------");
printf("\nAgora, depois de atribuir o valor \"30\"");
printf("\npara o ponteiro (p+15), exibimos os valores");
printf("\ne os endereços dos ponteiros p (declarado");
printf("\nno início do programa) e (p+15) (que é o");
printf("\nponteiro p 15 posições adiante na memória");
/* (p+15) SERÁ p NOVAMENTE */
p-=15;
/* E SERÁ INCREMENTADO */
p++;
printf("\n\n*p = %d, p = %p", *(p-1), (p-1));
printf("\n*(p++) = %d, p++ = %p", *p, p);
printf("\n--------");
printf("\nAgora o ponteiro está apenas um inteiro");
printf("\nadiantado na memória em relação ao ponteiro");
printf("\n\"original\" (p)");
/* AGORA, O PONTEIRO p++ PASSARÁ A TER O
* MESMO VALOR DE NUM2 (30) */
*p=num2;
printf("\n\n*p = %d, p = %p", *p, p);
printf("\n--------");
printf("\nAcima, foi atribuído a p++ o valor de num2");
/* p++ SOFRE DECREMENTO E SERÁ IGUAL AO p
* ORIGINAL */
p--;
/***********************************************/
/* ABAIXO, OS RESULTADOS OBTIDOS SÃO IMPRESSOS */
/***********************************************/
printf("\n\n\tRESULTADOS:\n");
printf("\n\tNum1: %d", num1);
printf("\n\tNum2: %d", num2);
printf("\n\n\tPonteiro p: *p = %d, p = %p", *p, p);
printf("\n\tPonteiro p++: *(p++) = %d, p++ = %p", *(p+1), (p+1));
printf("\n\tPonteiro p+15: *(p+15) = %d, p+15 = %p", *(p+15), (p+15));
printf("\n\n");
return(0);
}