Oppure

Loading
07/06/10 19:09
TheKaneB
ti stampa sempre 2 perchè ogni volta che passi un parametro ad una funzione, il compilatore crea una copia di quella variabile, quindi il contenuto dell'originale non viene toccato.

Questo fenomeno si chiama "Passaggio per valore", cioè alla funzione tu passi il "valore" della x, che viene "copiato" in una nuova variabile temporanea. Questa variabile temporanea esiste finchè esiste la funzione. Dopo il return, vengono distrutte automaticamente (per semplificare) tutte le variabili temporanee (o variabili locali) di una funzione.
aaa
07/06/10 20:42
Potresti studiarti le variabili globali, statiche locali e le variabili locali ...
07/06/10 23:04
napco
Il tuo libro parla di record di attivazione, o di "vita" di una funzione? Sono concetti teorici che è bene comprendere per riuscire a programmare in maniera decente. In breve, quando una funzione A chiama una funzione B, che a sua volta chiama una funzione C, le funzioni vengono risolte in ordine inverso: Prima viene eseguita la funzione C. Al termine il controllo ritorna al chiamante (return), ovvero alla funzione B. Al termine di questa, il controllo ritorna ad A e successivamente al programma principale. Nel caso di una funzione ricorsiva, A, B e C rappresentano la stessa identica funzione, chiamata però con parametri diversi.
aaa
08/06/10 7:29
forse lui intende una cosa del tipo:

#include <stdio.h>

int roll (int);

int x = 2;

int main (void) {
	printf("%d\n", x);
	roll(x);
	printf("%d\n", x);
	return 0;
}

int roll (int y) {
	if (y == 0) {
		x = 0;
		return 0;
	}
	return roll (y-1);
}