Why when we allocating memory block using (ma|re|c)alloc we use sizeof([count *] primitive data type)?

E.g.
Code:
int *a = malloc(5 * sizeof(int)); //allocating 5 blocks of int
Instead of
Code:
#define INT_SIZE 4
int *a = malloc(5 * INT_SIZE);
But, I'm not talking about
Code:
#define int char
Is there possibility that sizeof(int) could be changed to (for example) 2 or 16?