In C, all parameters are passed by value, including pointers. In the case of passing arrays, the array "decays" into a pointer to its original element.
Your first function passes a pointer to a block of ten unified pointers to int. This can be useful because it function(int**)can change pointers inside an array to valid pointers. For example, this is allowed:
void function (int *example[10])
{
for (int i = 0 ; i != 10 ; i++) {
example[i] = malloc((i+1)*sizeof(int));
}
}
(, )
. , function(struct example *e) , .
:
void function (struct example *e)
{
e->ex = 123;
}
e :
void function (struct example *e)
{
e = malloc(sizeof(struct example));
}