Recapitulação: Percorrendo Arrays com Ponteiros
Parte da seção Logic & Flow do Journey de C da Coddy — lição 11 de 63.
Desafio
FácilEscreva um programa em C que implemente uma função para calcular a soma de todos os elementos em um array de inteiros usando aritmética de ponteiros e a equivalência entre array e ponteiro. Seu programa deve:
- Criar uma função chamada
calculateSumque recebe dois parâmetros:- Um ponteiro para um inteiro (
int *arr) representando o array - Um inteiro (
size) representando o número de elementos no array
- Um ponteiro para um inteiro (
- Dentro da função
calculateSum:- Inicializar uma variável
sumcomo 0 - Criar uma variável ponteiro
ptre configurá-la para apontar para o início do array - Usar um loop para percorrer o array usando aritmética de ponteiros
- Em cada iteração, adicionar o valor apontado por
ptrà variávelsum - Incrementar o ponteiro para mover para o próximo elemento
- Retornar a soma calculada
- Inicializar uma variável
- Na função
main:- Ler um inteiro
nrepresentando o tamanho do array - Declarar um array de inteiros de tamanho
n - Ler
ninteiros da entrada para preencher o array - Chamar a função
calculateSumcom o array e seu tamanho - Imprimir o resultado no formato: "Sum: [value]"
- Ler um inteiro
A função deve usar aritmética de ponteiros para percorrer o array - não use a notação de indexação de array como arr[i]. Em vez disso, use operações de desreferenciação de ponteiro e incremento para acessar os elementos do array.
Por exemplo, se a entrada for:
5
10 20 30 40 50Sua saída deve ser:
Sum: 150Este desafio testa sua compreensão de como as funções podem aceitar arrays como parâmetros de ponteiro, como usar aritmética de ponteiros para percorrer arrays de forma eficiente e como os nomes de arrays são convertidos automaticamente em ponteiros quando passados para funções.
Experimente você mesmo
#include <stdio.h>
// TODO: Escreva sua função calculateSum aqui
int main() {
int n;
scanf("%d", &n);
int arr[n];
// Lê os elementos do array
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// TODO: Chame a função calculateSum e armazene o resultado
// TODO: Imprima o resultado no formato "Sum: [value]"
return 0;
}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