oct 03

Programació bàsica (Funcions)

Tag: Programació, c/c++mad93 @ 2:35 pm

En c fem us de les funcions. Un exemple de funció que ja hem vist és per exemple el main, que com vàrem veure, retorna un int (enter) mitjançant return 0; . Recordem que ho fixavem a zero perquè realment no ens importa el valor de la variable retornada, senzillament per a gcc el main, per definició, és un int i per tant hem de fer que torni un valor enter.

Tal com la funció main retorna un enter, podem fer una funció que retorni un caràcter, un real, cadena o fins i tot estructures ( recordar typedef struct). Això fa que una funció pugui retornar un valor amb només return <variable>;


float donarreal(float variable)
{
float variable2=0; //Això és un comentari, és ignorat per el compilador, inicialitzem a 0 la variable2
variable2 = variable/40;
return variable2;
}

Com podem veure aquesta funció retorna un real, variable2.  Si us hi fixeu he inicialitzat variable2 amb un valor igual a 0, però realment no feia feina, ja que la primera operació que fem amb ella és assignar-li el valor de variable dividit entre 40. Tot i no ser necessari en aquest cas és una bona costum, doncs quan creem una variable, aquesta rep una posició física a la memòria, que pot tenir ja dades emprades anteriorment, pel que voldrem tenir-hi un valor vàlid per a l'aplicació i no un d'aleatori.

Com ja haureu les funcions tenen una limitació important per si soles, doncs només poden retornar una variable, I els valors que se l'hi passen, com ara "variable", només canvien el seu valor mentre estan dintre de la funció, un cop sortim de la funció, es perden els canvis fets. És a dir, si dintre la funció féssim "variable=0;" , al sortir de la funció aquest canvi es perdria. Perquè? Doncs perquè quan passem una variable a una funció així, el que fem és fer una còpia de la variable original en una nova posició de memòria, el que fa que tots els canvis que hi fem no afectin a la variable de la funció mare, la original. La solució per a que una variable sigui modificada des d'una funció filla és l'ús de punters, que explicaré un altre dia :P

Fins ara hem vist com fer una funció, però com la cridem? Una crida de funció és el mateix que quan escrius la seva definició però simplificada (doncs al estar definida els paràmetres ja sabem de quin tipus és cadascun). En el cas  de l'anterior funció donarreal:


novavariable=donarreal(variablevella);

"novavariable" i "variablevella" són dues dades de tipus float (real) i el que fem aquí és passar-li la "variablevella" a la funció donarreal (com veiem el nom no té perquè ser igual al que hem posat a la definició de la funció). i llavors la funció ens retorna un valor real (float) que emmagatzemarem dintre de "novavariable".

Comparteix i gaudeix:
  • La Tafanera
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks

Leave a Reply