Decremento postfix

Tengo una pregunta muy simple.

en este fragmento de código, ¿cuándo disminuirá el valor de n?

#include void func(int n) { //text// } int main() { int n=10; func(n--); return 0; } 

ahora, cuando se llama a func (), el valor de n disminuye cuando el control regresa a main () o se reduce en ese momento solo pero n = 10 se pasa a func (). Por favor explique, también si hay una manera de verificar el valor, eso será realmente útil.

Cuando se llama a una función, todos sus argumentos se evalúan (en un orden definido por la implementación) antes de que la función pueda iniciarse , es un punto de secuencia. Entonces, después de que todos los argumentos son evaluados, la función finalmente puede comenzar.

Lo que esto significa es que n-- se evalúa y produce el valor 10 para la función. En el momento en que la función ha comenzado, n ya es 9, pero el parámetro n de la función mantiene el valor 10 .

Una forma sencilla de comprobar esto:

 void func(int n, int *np) { printf("Outside: %d\n", *np); } int main(void) { /* ... */ func(n--, &n); } 

El decremento se producirá antes de la llamada a la func , sin embargo a la func se le pasará una copia del valor anterior.

Considere la siguiente modificación a su progtwig que ilustra esto:

 #include  static int n; void func(int m) { printf("%d,%d\n", n, m); } int main() { n = 10; func(n--); return 0; } 

Huellas dactilares:

9,10

Creo que tu pregunta se expresa mejor con este código:

 #include  static int global_n; void func(int n) { printf("n = %d, global_n = %d\n", n, global_n); } int main() { global_n = 10; func(global_n--); return 0; } 

Esto demuestra que a la función se le pasa el valor anterior, pero la disminución ocurre antes de la llamada.

 n = 10, global_n = 9