Programação C: Como usar ponteiros em funções

Um ponteiro é um tipo de variável. Como tal, ele pode facilmente ser arremessado fora para uma função em programação C. Ainda mais emocionante, um ponteiro pode passear de volta de uma função como um valor de retorno. Muitas vezes, esses truques são as únicas maneiras de obter informações para ou a partir de uma função.

Como passar um ponteiro para uma função

A grande vantagem de passar um ponteiro para uma função que é a informação que é modificada não precisam de ser devolvido. Isso porque a função faz referência a um endereço de memória, e não um valor diretamente. Usando esse endereço, a informação pode ser manipulado sem ser devolvidos. Apontando para um desconto demonstra.

APONTAR EM UM DESCONTO

#include vazio desconto (float * a) -int main () {preço flutuador = 42.99-printf ( "O item custa R $%. 2f n", preço) -Desconto (preço) -printf ( "Com o desconto, que é . $% 2f n ", preço) -Retornar (0) -} desconto void (float * a) {* a = * a * 0.90-}

Na Linha 3 do Apontando para um desconto, a função de desconto () é um protótipo. Ela exige um tipo float da variável de ponteiro como seu único argumento.

A linha 10 passa o endereço do preço variável para a função de desconto (). O sinal de porcentagem obtém a posição de memória do preço variável.

Dentro da função, variável de ponteiro uma é usada para espreitar o valor na localização de memória que é passado.

Exercício 1: Digite o código-fonte do Apontando para um desconto em seu editor. Criar e executar o programa.

Exercício 2: Modifique o código fonte do Exercício 1, de modo que uma variável ponteiro flutuador p é declarado na função main (). Inicializar p ao preço localização variável, e depois passá p para a função de desconto ().

exercício 3: Criar um novo projeto com duas funções: criar () e show (). A função create () recebe um ponteiro para uma matriz de dez inteiros e preenche essa matriz com valores aleatórios no intervalo de 0 a 9. A função show () recebe a mesma matriz e exibe todos os dez elementos.

Como retornar um ponteiro de uma função

As funções são conhecidos pelos seus tipos, como int ou char ou mesmo nula. Você também pode declarar funções de ponteiro, que retornam um local de memória como um valor. Basta declarar a função como sendo de um tipo de ponteiro, como

char * monstro (void)

Neste exemplo, a função monstro () é declarada. Ela não requer argumentos, mas retorna um ponteiro para uma matriz de char - um valor de cadeia.

Aqui está outra diferença com funções que retornam ponteiros: O valor que é retornado deve ser declarado como uma variável estática. Tenha em mente que as variáveis ​​são locais para as suas funções. Você deve manter os dados na variável, declarando-o como um tipo estático para que seu conteúdo não são descartados quando a função pára. Invertendo uma String é um exemplo.

INVERSÃO UMA CORDA

Char #include * strrev (char * entrada) () {string de char principal -int [64] -printf ( "Digite algum texto:") -fgets (String, 62, stdin) -puts (strrev (string)) - retorno (0) -} char * strrev (char * entrada) de saída {static char [64] -char * i * oi = input- o = output-while (* i ++ = ' n'!) - i --- while (i> = entrada) * o ++ = * i --- * o = ' 0'-retorno (output) -}

Invertendo uma String pode ficar bastante confuso. Preste atenção!

Linha 3 protótipos a função strrev (). Ele retorna um ponteiro - neste caso, o endereço de uma matriz de char ou string.

A função main () na Linha 5 é muito fácil de descobrir. Entrada é recolhida pelos fgets () função na Linha 10. É passado para strrev () na Linha 11 dentro das puts () função.

A função strrev () começa na linha 16. Ele requer um ponteiro de char como seu argumento, que é referido como entrada na função. O buffer de saída é criada na Linha 18, e é estático, por isso não vai embora quando a função é feito. A linha 19 declara dois ponteiros de char: i e o.

O primeiro loop while na Linha 23 encontra o caractere de nova linha no final da cadeia de entrada. o Eu marchas variáveis ​​através da cadeia de um caractere de cada vez.

Depois de encontrar a nova linha, a Eu ponteiro contém o endereço da próxima personagem na entrada, o que provavelmente não é o que você quer. Assim, a declaração na linha 25 faz backup Eu para apontar para o último caractere na cadeia antes da nova linha.

No início do ciclo, enquanto a linha 27, o ponteiro mantém a base do tampão de saída, o primeiro carácter, e ponteiro Eu detém a última. Tente pensar dessa situação como Eu em pé no topo de uma escadaria e o em pé na parte inferior.

O loop while gira até que o endereço no ponteiro Eu corresponde ao endereço no início da cadeia de entrada. Como Eu é diminuída, os caracteres no endereço Eu são copiados para tratar o. Figurativamente, Eu marcha descer as escadas, e o marchas para cima.

Linha 29 tampas da cadeia de saída com um carácter NULL. Isso é algo que você deve se lembrar quando você cria cadeias, utilizando ponteiros.

A instrução de retorno na Linha 31 envia o endereço do buffer de saída, a string invertida, de volta para a instrução de chamada.

Exercício 4: Digite o código-fonte do Revertendo uma String em seu editor. Conforme você digita o código, adicionar seus próprios comentários descrevendo o que está acontecendo. Sinta-se livre para usar o texto como um guia. Criar e executar o programa.

menu