Menu
Coddy logo textTech

Passagem por Valor

Parte da seção Logic & Flow do Journey de C da Coddy — lição 25 de 63.

Quando você passa uma variável para uma função em C, a função recebe uma cópia do valor dessa variável, não a variável em si. Este conceito fundamental é chamado de passagem por valor.

Aqui está o que acontece: se você tiver uma variável x com o valor 10 e a passar para uma função, a função recebe sua própria cópia separada desse valor. Quaisquer alterações que a função fizer nesta cópia não afetam a variável original de volta na função chamadora.

void tryToChange(int num) {
    num = 99;  // Isso altera apenas a cópia
}

int main() {
    int x = 10;
    tryToChange(x);
    // x ainda é 10, não 99
    return 0;
}

Este comportamento protege seus dados originais de serem modificados acidentalmente por funções. No entanto, isso também significa que, se você quiser que uma função realmente altere o valor de uma variável, a passagem por valor (pass-by-value) não funcionará. Compreender essa limitação é crucial à medida que você avança para aprender sobre ponteiros e como eles podem resolver esse problema.

challenge icon

Desafio

Fácil

Escreva um programa em C que demonstre o conceito de passagem por valor ao tentar modificar uma variável dentro de uma função e observar que a variável original permanece inalterada.

Seu programa deve:

  1. Criar uma função chamada tryToModify que recebe um parâmetro inteiro chamado number
  2. Dentro da função tryToModify, adicionar 50 ao parâmetro number
  3. Dentro da função tryToModify, imprimir o valor modificado no formato: Inside function: [value]
  4. Na função main, declarar uma variável inteira chamada original e inicializá-la com o valor 25
  5. Imprimir o valor original antes de chamar a função no formato: Before function call: [value]
  6. Chamar a função tryToModify e passar a variável original como argumento
  7. Após a chamada da função, imprimir o valor de original novamente no formato: After function call: [value]

Sua saída deve demonstrar que o valor da variável original permanece inalterado, apesar da modificação dentro da função:

Before function call: 25
Inside function: 75
After function call: 25

Este desafio demonstra o conceito fundamental de passagem por valor em C, onde as funções recebem cópias das variáveis em vez das próprias variáveis. Quaisquer modificações feitas no parâmetro dentro da função não afetam a variável original na função chamadora.

Folha de consulta

Em C, as funções recebem uma cópia dos valores das variáveis, não as variáveis em si. Isso é chamado de passagem por valor.

Quando você passa uma variável para uma função, qualquer alteração feita dentro da função afeta apenas a cópia, deixando a variável original inalterada:

void tryToChange(int num) {
    num = 99;  // Isso altera apenas a cópia
}

int main() {
    int x = 10;
    tryToChange(x);
    // x ainda é 10, não 99
    return 0;
}

Esse comportamento protege seus dados originais de serem modificados acidentalmente por funções, mas significa que a passagem por valor não funcionará se você quiser que uma função realmente altere o valor de uma variável.

Experimente você mesmo

#include <stdio.h>

// TODO: Escreva sua função tryToModify aqui

int main() {
    // TODO: Escreva seu código aqui
    // 1. Declare e inicialize a variável original
    // 2. Imprima o valor antes da chamada da função
    // 3. Chame a função tryToModify
    // 4. Imprima o valor após a chamada da função
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow