The advantage (in my opinion) to using sizeof object rather than sizeof (type) is that you have one less place to change if you decide to use another type later on: the compiler knows the type of the object.
Code:
int *x;
/* ... */
x = malloc(100 * sizeof *x); // if the type changes, this line can be left alone
Code:
double *x;
/* ... */
x = malloc(100 * sizeof *x); // if the type changes, this line can be left alone
Compare with
Code:
int *y;
/* ... */
y = malloc(100 * sizeof (int)); // if the type changes, this line must be changed too
Code:
double *y;
/* ... */
y = malloc(100 * sizeof (double)); // if the type changes, this line must be changed too