Ponteiros - Parte 2
⚖️ Equivalência de tipos
Como vimos na primeira parte do conteúdo sobre ponteiros, podemos trabalhar com a atribuição de valores entre ponteiros, como evidenciado no exemplo abaixo:
int a = 5, b = 10;
int *x = &a, *y = &b;
*x = *y;
printf("Valor apontado por X: %d\n", *x);
Observe que a atribuição de valores deve levar em consideração o tipo do dado para o qual aquele endereço de memória aponta. No programa anterior, as variáveis a
e b
são do tipo inteiro, assim como as variáveis x
e y
são ponteiros do tipo int
.
Veja, no entanto, o caso a seguir:
#include<stdio.h>
#include<stdlib.h>
int main(void){
float var = 7.0;
int *pont = &var;
printf("%f", *pont);
}
#include<stdio.h>
#include<stdlib.h>
int main(void){
float var = 7.0;
int *pont = &var;
printf("%f", *pont);
}
Nesses casos, o programa assume um comportamento inesperado. Caso a intenção seja manter os tipos de dados diferentes entre o ponteiro e a variável, faz-se necessário efetuar a conversão de tipos (typecasting), como no exemplo a seguir:
#include<stdio.h>
#include<stdlib.h>
int main(void){
float var = 7.0;
int *pont = &var;
printf("%f", *((float*)pont));
}