Domanda semplicissima sui puntatori, più nello specifico sulla chiamata per riferimento: la prima funzione usa una chiamata per valore passando number alla funzione che inizializza una variabile locale n per elevare al cubo, mentre la seconda usa un puntatore che punta all'intero per elevare direttamente number (chiamata per riferimento).
Eccole:

codice:
#include <stdio.h>

int CubaByValue(int n);

int main()
{
   int number=5;
   printf("The original value of number is %d\n", number);

   number=CubeByValue(number);
   printf("The new value of number is %d\n", number);

   return 0;
}
int cubeByValue (int n){
   return n*n*n;
}
codice:
#include <stdio.h>

int CubeByReference(int *Ptr);

int main()
{
   int number=5;
   printf("The original value of number is %d\n", number);
   
   CubeByReference(&number);
   printf("The new value od number is %d\n", number);

   return 0;
}

void CubeByReference(int *Ptr){
   *Ptr=*Ptr * *Ptr * *Ptr;
}
Ora la mia domanda è: in C ogni chiamata è per valore, quindi usando un puntatore posso simulare una chiamata per riferimento giusto? Fin qui ok, ma cosa mi spinge ad usare un puntatore (è comunque una variabile in più) quando posso fare come nel primo esempio e dichiarare una variabile locale n per poi assegnarla a number appena la funzione chiamante riprende il controllo? Non posso modificare direttamente number come farei col puntatore ma dichiarando la variabile locale n risolvo la questione tranquillamente perchè una volta uscita dalla funzione n si assegna a number...
Alla fine sbaglio o dichiarare un puntatore non mi cambia nulla? In ogni caso è sempre una variabile in più..