Non è che restituisce qualkosa...pero nell'ambito di un 'espressione

var1 = var2;

viene valutata come il valore che ha var1 dopo l'assegnamento, ad esempio:

codice:
int m(){
	int a = 0;
        int b = 2;
	return a = b;
}
la funzione m ritorna 2 che è il valore assegnato a var1

oppure

codice:
int m(){
	int a = 0;
        int b = 2;
	if(a = b)
             printf("ciao");
}
l'istruzione di stampa viene eseguita perche ad 'a' viene assegnato il valore 2 e l'assegnamento 'a = b' ritorna il valore della variabile assegnata.