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));
}