I acknowledge that all three of these have a different meaning. But, I don't understand on what particular instances would each of these apply. Can anyone share an example for each of these? Thank you.
malloc(sizeof(int))
malloc(sizeof(int *))
(int *)malloc(sizeof(int))
malloc(sizeof(int))
means you are allocating space off the heap to store an int
. You are reserving as many bytes as an int
requires. This returns a value you should cast to As some have noted, typical practice in C is to let implicit casting take care of this.int *
. (A pointer to an int
.)
malloc(sizeof(int*))
means you are allocating space off the heap to store a pointer to an int
. You are reserving as many bytes as a pointer requires. This returns a value you should cast to an int **
. (A pointer to a pointer to an int
.)
(int *)malloc(sizeof(int))
is exactly the same as the first call, but with the the result explicitly casted to a pointer to an int
.
Note that on many architectures, an int
is the same size as a pointer, so these will seem (incorrectly) to be all the same thing. In other words, you can accidentally do the wrong thing and have the resulting code still work.