#include <stdio.h>
int main()
{
/* Para variaveis: */
int d = 10; //variavel
printf("d = %d\n", d ); //normal
printf("d = %d\n", *(&d) ); //notacao de ponteiros
printf("d = %d\n", *(&d + 0) ); //notacao de aritmetica de ponteiros
printf("d = %d\n", (&d)[0] ); //notacao de vetores
printf("\n");
int *p; //ponteiro
p = &d; //guarda uma copia da referencia de d no ponteiro p
printf("*p = %d\n", *p ); //notacao de ponteiros
printf("*p = %d\n", *(p + 0) ); //notacao de aritmetica de ponteiros
printf("*p = %d\n", p[0] ); //notacao de vetores
*p = 20; //atribuicao de valor
printf("*p = %d --- d = %d\n", *p, d); //alterou o valor de d
printf("\n");
/* Para vetores: */
int vet[2]; //vetor
vet[0] = 5; //atribuicao com notacao de vetores
*(vet + 1) = 7; //atribuicao com notacao de ponteiros
printf("vet[0] = %d | vet[1] = %d\n", *vet , *(vet + 1) ); //notacao de ponteiros
printf("vet[0] = %d | vet[1] = %d\n", *(vet + 0) , *(vet + 1) ); //notacao de aritmetica de ponteiros
printf("vet[0] = %d | vet[1] = %d\n", vet[0] , vet[1] ); //notacao de vetores
printf("\n");
int *pv; //ponteiro
pv = vet; //guarda uma copia da referencia de vet no ponteiro pv
printf("pv[0] = %d | pv[1] = %d\n", *pv , *(pv + 1) ); //notacao de ponteiros
printf("pv[0] = %d | pv[1] = %d\n", *(pv + 0) , *(pv + 1) ); //notacao de aritmetica de ponteiros
printf("pv[0] = %d | pv[1] = %d\n", pv[0] , pv[1] ); //notacao de vetores
pv[0] = 6; //atribuicao com notacao de vetores
*(pv + 1) = 8; //atribuicao com notacao de ponteiros
printf("pv[0] = %d | pv[1] = %d --- vet[0] = %d | vet[1] = %d\n",
*pv, *(pv + 1), vet[0], vet[1]); //alterou vet[0] e vet[1]
printf("\n");
return 0;
}