Passagem de parâmetros - Parte 2
Na página "Passagem de Parâmetros - Parte 1", vimos que podemos usar ponteiros para acessar diretamente uma posição de memória a partir de seu endereço. Esse recurso é bastante útil para lidarmos com passagem de parâmetros em funções, já que:
- variáveis de tipos primitivos são passadas por cópia, com duração temporária na stack de memória;
- vetores e matrizes são passados como ponteiros para as funções, que podem acessar diretamente suas posições na memória;
🏹 Ponteiros e funções
Para receber um ponteiro, a função deve conter essa declaração em sua assinatura:
#include<stdio.h>
#include<stdlib.h>
void receberPonteiro(float *variavel){
*variavel = 10.0;
}
int main(void){
float nota1 = 5.0;
receberPonteiro(¬a1); // usar & antes para passar o endereço de memória
printf("Valor: %f", nota1);
}
Alternativamente, o código poderia ser implementado da seguinte forma;
#include<stdio.h>
#include<stdlib.h>
void receberPonteiro(float *variavel){
*variavel = 10.0;
}
int main(void){
float nota1 = 5.0;
float *nota1Ptr = ¬a1;
receberPonteiro(nota1Ptr);
printf("Valor: %f", nota1);
}
Um exemplo bem comum que encontramos ao estudarmos o uso de ponteiros consiste na troca de valores entre duas variáveis. Observe a implementação a seguir:
#include<stdio.h>
#include<stdlib.h>
void trocar(int *x, int *y){
int aux = *x;
*x = *y;
*y = aux;
}
int main(){
int a = 10, b = 20;
printf("A: %d - B: %d\n", a, b);
trocar(&a,&b);
printf("A: %d - B: %d\n", a, b);
return 0;
}