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