Ваш первый образец не работает, почему я думаю, что вы думаете, что он делает. Сначала вы сохраняете результат вызова функции в переменной x, а затем переопределяете значение x вновь созданным массивом. * (function ()) = 5 должен правильно попытаться записать 5 в какую-нибудь случайную ячейку памяти, указанную локальной переменной x внутри вашей функции.
Пример:
int x;
int* function()
{
return &x;
}
int main()
{
*(function()) = 5;
printf("%d\n", x);
}