Crie uma função que receba dois parâmetros: um array e um valor do mesmo tipo do array. A função deverá preencher os elementos de array com esse valor. Não utilize índices para percorrer o array, apenas aritmética de ponteiros.

Passo 1

O enunciado pede uma função em C que receba dois parâmetros: um array e um valor do mesmo tipo dos elementos do array, e que preencha todo o array com esse valor usando apenas aritmética de ponteiros (sem usar índices).
Uma dificuldade imediata é saber até onde percorrer o array: em C, arrays não carregam seu tamanho. Para não fugir do enunciado de dois parâmetros, a forma mais natural é assumir que esse array é uma string terminada em ‘\0’, pois aí temos um marcador de fim. Assim, nosso array será de tipo char[] e o valor também char.

Passo 2

Vamos então criar uma função: ela recebe um ponteiro para char (o início da string) e um char com o valor a ser repetido. A ideia é percorrer caracter a caracter até encontrar o ‘\0’, substituindo cada posição por esse valor.
Do ponto de vista de aritmética de ponteiros, fazemos um ponteiro auxiliar que anda pela memória: começamos em s, testamos *s para ver se é o terminador, e em cada iteração escrevemos *s = c e fazemos s++ para avançar.
Como resultado, todos os caracteres originais serão substituídos por c, e deixamos o terminador ‘\0’ intacto (opcionalmente podemos escolher substituir também, mas tipicamente preserva-se o fim de string).

Passo 3

Abaixo está o código completo da função usando somente ponteiros:
void preenche_string(char *s, char c)
{
    while (*s != '\0') {
        *s = c;
        s++;
    }
}

Resposta

void preenche_string(char *s, char c)
{
    while (*s != '\0') {
        *s = c;
        s++;
    }
}

Exercícios relacionados