@Fortistis
Ναι, το α και το β είναι διαφορετικά μεταξύ τους.
Ο compiler "δεν κάνει evaluate το [] σε pointer" όπως λες. Αυτό που γίνεται όταν χρειάζεται σε κάποια context είναι το όνομα του array να γίνεται decayed σε έναν pointer που δείχνει στο πρώτο στοιχείο.
Γενικά επειδή αφήνεις να εννοηθεί συνέχεια ότι arrays και pointers είναι το ίδιο πράγμα, εδώ είναι μερικά παραδείγματα που μπορώ να σκεφτώ πρόχειρα:
int arr[] = {1, 2, 3}; // LEGAL
int *p = {1, 2, 3}; // ILLEGAL
int *p = arr;
p = 0xabcd; // reassignment is LEGAL
int arr[] = {1, 2, 3};
arr = 0xabcd; // reassignment is ILLEGAL
sizeof(arr) != sizeof(p)
Bonus: το arr and το &arr ΔΕΝ είναι το ίδιο πράγμα.
Ξέρεις γιατί; Γιατί έχουν άλλο τύπο.
C 101: ARRAYS ARE NOT POINTERS