https://stackoverflow.com/a/17258659
It is safer becuse you don’t have to mention the type name twice and don’t have to build the proper spelling for “dereferenced” version of the type. For example, you don’t have to “count the stars” in
int *****p = malloc(100 * sizeof *p);
Compare that to the type-based sizeof
in
int *****p = malloc(100 * sizeof(int ****));
where you have too make sure you used the right number of *
under sizeof
.
In order to switch to another type you only have to change one place (the declaration of p
) instead of two. And people who have the habit of casting the result of malloc
have to change three places.