Modificando Variáveis via Ponteiros
Parte da seção Logic & Flow do Journey de C da Coddy — lição 27 de 63.
Agora você pode aproveitar o verdadeiro poder dos ponteiros: modificar a variável original através de uma função. Quando você passa um ponteiro para uma função, a função pode usar o operador de desreferência para alterar o valor armazenado naquele endereço de memória.
Dentro da função, você desreferencia o ponteiro usando o operador * para acessar e modificar o valor da variável original. Essa técnica é chamada de passagem por referência porque você está passando uma referência para a localização da variável na memória.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Desreferenciar para modificar o valor original
}
int main() {
int x = 5;
doubleValue(&x); // Passar o endereço de x
// x agora é 10!
return 0;
}A chave é usar *ptr no lado esquerdo da atribuição para modificar o valor no endereço de memória que o ponteiro contém. Isso permite que funções alterem permanentemente variáveis da função chamadora, abrindo possibilidades de programação poderosas que a passagem por valor simplesmente não consegue alcançar.
Desafio
FácilEscreva um programa em C que demonstre a modificação de variáveis através de ponteiros, criando uma função que triplica o valor de um número inteiro.
Seu programa deve:
- Criar uma função chamada
tripleValueque recebe um ponteiro para um inteiro como seu parâmetro - Dentro da função
tripleValue, usar o operador de desreferência para multiplicar o valor no endereço de memória por 3 - Dentro da função
tripleValue, imprimir o novo valor no formato:Value tripled to: [value] - Na função
main, declarar uma variável inteira chamadanumbere inicializá-la com o valor 8 - Imprimir o valor original no formato:
Original value: [value] - Chamar a função
tripleValuee passar o endereço da variávelnumberusando o operador de endereço (address-of) - Após a chamada da função, imprimir o valor final de
numberno formato:Final value: [value]
Sua saída deve demonstrar que a função modifica com sucesso a variável original através do ponteiro:
Original value: 8
Value tripled to: 24
Final value: 24Este desafio demonstra o poder da passagem por referência usando ponteiros, onde a função pode modificar permanentemente a variável original ao desreferenciar o ponteiro e alterar o valor naquele local da memória.
Folha de consulta
Você pode modificar a variável original através de uma função usando ponteiros. Esta técnica é chamada de passagem por referência porque você está passando uma referência para o local da variável na memória.
Dentro da função, desreferencie o ponteiro usando o operador * para acessar e modificar o valor da variável original:
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Desreferencie para modificar o valor original
}
int main() {
int x = 5;
doubleValue(&x); // Passe o endereço de x
// x agora é 10!
return 0;
}Use *ptr no lado esquerdo da atribuição para modificar o valor no endereço de memória que o ponteiro contém. Isso permite que as funções alterem permanentemente as variáveis da função chamadora.
Experimente você mesmo
#include <stdio.h>
// TODO: Escreva sua função tripleValue aqui
int main() {
// TODO: Escreva seu código aqui
// Declare e inicialize a variável number
// Imprima o valor original
// Chame a função tripleValue
// Imprima o valor final
return 0;
}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
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato