¿Beneficio de pasar un int por referencia vs por valor?

  1. ¿Hay un beneficio en el rendimiento al pasar las entradas por referencia en lugar de por valor? Digo esto porque si pasa por referencia, está creando un puntero de 4 bytes, pero si pasa por valor, está creando una copia de 4 bytes del valor de todos modos. Así que ambos ocupan un extra de 4 bytes, ¿verdad?
  2. ¿Es posible pasar un int literal por referencia usando un cast: (int *)? ¿O tienes que pasar un puntero a un int? Ver código de ejemplo a continuación:

    int func1(int *a){ (*a)++; // edited from comment by Joachim Pileborg printf("%i\n", *a); return 0; } int func2(int a){ a++; printf("%i\n", a); return 0; } int main(void){ func1(&(int *)5); // an int literal passed by reference using a cast ? func2(5); return 0; } 

La ventaja de pasar por el puntero (no hay referencias en C) es que una función puede actualizar el int original, es decir, devolver un valor en él. No hay beneficio de rendimiento; más bien, el paso por puntero puede ralentizar el progtwig porque el int que se apunta tiene que estar en la memoria direccionable, por lo que no puede estar en un registro.

Tenga en cuenta que &(int *)5 no hace lo que cree que hace. (int *)5 convierte el valor 5 en un puntero, interpretándolo como una dirección de memoria. El & daría la dirección de ese puntero, excepto que tomar la dirección de un temporal es ilegal. Probablemente quiso decir

 int i = 5; func1(&i);