Trata-se de uma questão que versa sobre programação, mais especificamente sobre passagem de parâmetros.
O processo de passagem de parâmetros é o processo pelo qual se estabelece a comunicação entre uma sub-rotina e o trecho do programa que chama essa sub-rotina.
Exemplo, podemos declarar uma variável X, e passar essa variável X para uma procedure ou função, isso seria uma passagem de parâmetro.
A passagem de parâmetros pode ser valor ou por referência. A passagem por valor acontece quando o valor real é passado (ou retornado) para uma sub-rotina, enquanto na passagem por referência não é o valor real que é passado, e sim a referência para esse valor.
O que muda, de fato então?
Bom, se a passagem de parâmetros foi feita por valor, exemplo, você tem a variável X que tem o valor 5, e você passa ela para uma sub-rotina, usando passagem de parâmetro por valor, as alterações que essa sub-rotina fizer não irão refletir na variável X que está fora da sub-rotina, pois apenas o valor dela foi passado. Na passagem por referência é o contrário, se você tem a variável X com o valor 5, e passa ela como referência para a sub-rotina, as alterações feitas dentro da sub-rotina irão refletir na variável X fora da sub-rotina.
Dessa forma, quando um valor real tem saída de dentro de uma sub-rotina, ou seja, quando o valor alterado dentro da sub-rotina "sai" do contexto da sub-rotina, temos a passagem de parâmetro por referência.
Gabarito do Professor: Letra D.