Sim, eu acho que percebi os resultados. Só não tenho a certeza é dos pontos que o @HappyHippyHippo tem entre cada número/algarismo! Se ele colocou os pontos apenas para separar cada resultado, então acho que percebi.
Como exemplo:
int f1(int *i){
printf("%d",*i);
*i=*i+1;
*i=*i%2;
return *i;
}
...
i=f1(&i);
printf("%d",i);
É enviado o endereço de memória da variável 'i' para dentro da função. Dentro da função é imprimido o valor apontado por aquele endereço de memória, ou seja, o 14.
Depois o valor apontado por aquele endereço de memória é incrementado em 1 valor e como tal o valor apontado por aquele endereço de memória fica igual a 15. Na penúltima linha, esse mesmo valor é dividido por 2 e o resto dessa divisão é guardado nessa variável 'i', portanto 15 % 2 = 1. E é este último valor que é devolvido pela função e que é imprimido a partir da função main. Daqui aparece o 14 e o primeiro 1 do resultado apresentado pelo OP. Ora, para mim isto não faz muito sentido. Andar a fazer passagem de parâmetros por referência de uma variável que é golbal, é um pouco redundante. Mas como o objectivo não é apenas a passagem de parâmetros, então talvez se justifique o código!
↧