Funções e passagem de parâmetros em C e C++
Nesta lição, você vai comparar três formas de passar parâmetros para uma função: por valor, por ponteiro e por referência.
Introdução
Por padrão, ao passar uma variável para uma função, C e C++ criam uma cópia dela, então mudanças dentro da função não afetam a variável original. Se a função precisa alterar a variável original, quem chama precisa permitir isso explicitamente, com um ponteiro em C ou uma referência em C++.
Pontos importantes
- Ative os avisos do compilador (compiler warnings) e corrija todos eles.
- Entenda o tipo de dado e o tempo de vida (lifetime) de cada valor.
- Sempre valide os dados de entrada e os limites dos índices de arrays.
Exemplos de código C e C++
#include <stdio.h>
void swap_ints(int *left, int *right) {
int temporary = *left;
*left = *right;
*right = temporary;
}
int main(void) {
int a = 4, b = 9;
swap_ints(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
9 4
#include <iostream>
void swap_ints(int& left, int& right) {
int temporary = left;
left = right;
right = temporary;
}
int main() {
int a = 4, b = 9;
swap_ints(a, b);
std::cout << a << ' ' << b << '\n';
}
9 4
Comparação entre C e C++
Em C, a função swap_ints recebe o endereço das duas variáveis e usa o operador * para acessá-las e trocar seus valores. Em C++, a referência (reference) funciona como outro nome para a variável original, então a sintaxe fica mais curta e ainda altera o valor. A palavra-chave const em um parâmetro indica que a função só lê os dados, sem modificá-los.
C usa funções procedurais pequenas e deixa à vista como os dados ficam na memória.
C++ continua permitindo trabalhar em baixo nível, mas acrescenta tipos da biblioteca e abstrações mais seguras.
Exercícios práticos
Execute as duas versões e depois mude o código para observar a diferença de segurança que cada linguagem oferece.
- Teste entradas inválidas e valores nos limites.
- Compile com as flags -Wall -Wextra -Wpedantic para ativar mais avisos.
- Separe as declarações compartilhadas em um arquivo de cabeçalho e a implementação em outro arquivo.
Pratique com um desafio
Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.
- Distance Between Points Compute the straight-line distance between two points. Fácil
- Dias em um Mês Retorne quantos dias tem um mês, incluindo anos bissextos. Fácil