Malloc
Uma função só pode retornar por meio de return um único valor. Para retornar mais de um valor será necessário utilizar ponteiros.
Uma variável que armazena um endereço de outra variável é chamada ponteiro. Não somente armazena o endereço da variável como também aponta para ela. Ou seja, toda vez que tratarmos a variável ponteiro como uma variável que aponta, estaremos modificando a variável original.
Por exemplo, uma variável que armazena um endereço de uma variável do tipo float é do tipo float *. O asterisco indica ponteiro para.
Por exemplo, o protótipo da função reajuste20 (float*, float*) vai receber o endereço de duas variáveis do tipo float. Ou seja, a função recebe como argumento dois ponteiro para float. O seu protótipo também indica que serão criada duas variáveis do tipo float* [float que aponta para] para receber esse endereço de variáveis do tipo float passadas como argumento da função main ().
Reajuste20 (float *preco, float *reajuste) {
*reajuste = *preco *0,2;
*preco = *preco * 1,2;}
O protótipo indica que *preço e *reajuste são do tipo float da mesma forma que preco e reajuste são do tipo float* (ponteiros para variáveis float). Essa representação é muito boa, uma vez que sabemos que preço e reajuste são variáveis que armazenam endereço de uma variável. Ou seja, são ponteiros. E não so diz que são ponteiros, como diz que são ponteiros do tipo float. Assim, são variáveis que apontam para variáveis float representados por float*.
Mas podemos pensar também que *preço e *reajuste na verdade são ponteiros para o que esta no endereço de preço e reajuste. Assim, qualquer alteração em *preço e *reajuste alterará seus valores apontados. E como seus valores apontados são do tipo float, *preço e *reajuste são do tipo float.
Uma variável que armazena um endereço do tipo float é float*. Assim, preço e reajuste são do tipo float*.
Uma variável que aponta para outra por meio de seu endereço é