Quando criamos uma variável, o que está guardado nela fica guardado fisicamente no computador, na sua memória, RAM, que é a memória que a computador usa quando executa programas.
int main () {
int age = 30 ;
printf ("%p", &age) ; // p de Pointer // & dá o endereço fisico da variável
// &age é um Pointer
return 0 ;
}
== 0060FF00 // Por exemplo
/* Este numero é o local da RAM aonde fica guardado o valor 30 da variável age
É como fosse o nome do local aonde a informação está guardada */
// C usa esta memory adresses para buscar o valor da variável
Um pointer é um data type para uma memory adresse.
Para criarmos uma variável pointer, não sabemos exatamente a memory adresse, então quando criamos um pointer, queremos guardar a memory adresse de uma variável que já existe, da seguinte maneira :
int main () {
int age = 30 ;
int * pAge = &age ; // Pointer variable da variável age
double gpa = 3.4 ;
double * pGpa = &gpa ; // Pointer variable da variável gpa
char grade = 'A' ;
char * pGrade = &grade ; // Pointer variable da variável grade
printf ("%p", &age) ; // Este pointer da a memory adresse da variável age
// ou
printf ("%p", pAge) ; // Este pointer da a memory adresse da variável age
printf ("%d", *pAge) ; /* **Dereferecing** a pointer - desta maneira o programa vai
buscar o que está guardado na memory adresse pAge
que neste caso, é o valor 30 */
return 0 ;
}
Logo :
Exemplo de utilização :
Como podemos retornar 2 inteiros com uma função auxiliar para a main, sendo que só podemos usar um return ?
Exemplo de uma função que recebe dois ints e dá os mesmos dois ints mas o maior deles será o primeiro elemento e o menor será o segundo
void maxMin (int x, int y) {
int t;
if (x<y) {
t = x;
x = y;
y = t;
};
}
// Esta função funciona e os elementos trocam, mas a não passa estas informações para a main
// Logo, podemos usar as memorys adresses das das variáveis, assim as informações serão passadas para a main
void maxMin (int *x, int *y) { // Os data types dos argumentos da funções são pointers
int t;
if (x<y) {
t = *x; // Guardar o valor que está dentro da variável x dentro da variável t
*x = *y; // O valor que está dentro da variável y vai ser guardado dentro da variável x
*y = t; // O valor da variável t vai ser guardado dentro da variável y
};
}
int main () {
int x = 3, y = 6, z;
maxMin (&x, &y); // Chamar a função com as memorys adresses das variáveis
printf ("%d %d \\n", x, y); // Imprimir o valor das variáveis
return 0;
}
== 6 3