Programação c: como usar ponteiros em funções

Um ponteiro é um tipo de variável. Como tal, ele pode ser facilmente jogado 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 está modificado não precisa 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.

APONTA EM UM DESCONTO

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

Na linha 3 de apontar 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.

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 ponteiro uma é usado para espreitar o valor na localização de memória que é passado.

Video: Programar em C - Passar Ponteiro Como Parâmetro de Uma Função - Aula 66

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

Exercício 2: Modificar seu código-fonte do Exercício 1 para 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: Construir um novo projeto com duas funções: criar () e show (). A função de criar () recebe um apontador para uma matriz de dez números inteiros e preenche essa matriz com valores aleatórios no intervalo de 0 a 9. A função mostra () recebe a mesma matriz e apresenta todos os dez elementos.

Como retornar um ponteiro de uma função

As funções são conhecidos pelos seus tipos, tais como int ou carvão animal ou mesmo nula. Você também pode declarar funções de ponteiro, que retornam um local de memória como um valor. Simplesmente declarar a função como sendo de um tipo de ponteiro, tal 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 string.



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 reter os dados na variável, declarando-o como um tipo estático para que seu conteúdo não são descartadas quando a função pára. Invertendo uma corda proporciona um exemplo.

Revertendo uma STRING

#include de char * strrev (* entrada carvão animal) -int main () {cadeia char [64] -printf ("Digite algum texto: ") -fgets (cadeia, 62, stdin) -puts (strrev (cadeia)) - retorno (0) -} char * strrev (char * entrada) {de saída estático char [64] -char * i, * oi = input- o = output-while (* i ++ = `n`!) - i --- while (i gt; = entrada) * o ++ = * i --- * o = `` -Retornar (saída) -}

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

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

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

A função strrev () começa na linha 16. Isso requer um ponteiro de char como argumento, que é referido como entrada na função. O buffer de saída é criado 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 seqüência de um carácter de cada vez.

Video: Aula 94 - Ponteiro para função

Depois de encontrar a nova linha, a Eu ponteiro contém o endereço do próximo 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é na parte superior de uma escada e o em pé na parte inferior.

O loop enquanto 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 resolver o. Figurativamente, Eu marcha descer as escadas, e o marcha 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 revertida, de volta para a instrução de chamada.

Exercício 4: Digite o código-fonte do Invertendo 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.


Publicações relacionadas