#include  <stdio.h>
#include <stdint.h>

void func(void) {
    printf("Hello!\n");
}

int main(void) {
    uint32_t* interim = (uint32_t*) &func;

    void(*ptr1)(void);
    ptr1 = (void*) interim;
    ptr1();

    void(*ptr2)(void);
    ptr2 = (void(*)(void)) interim;
    ptr2();
    
    printf("The function pointers store ");
    printf(((ptr1 == ptr2) && (ptr1 == &func) && (ptr2 == &func)) ? "identical" : "distinct");
    printf(" addresses.\n");
}