PDA

Visualizza la versione completa : [C] perché utilizzare i puntatori ?


Enna90
23-01-2013, 16:12
#include <stdio.h>
0015 #include <stdlib.h>
0016
0017 int* foo() {
0018 int i, *v = (int*) malloc( 10*sizeof(int) );
0019 for ( i=0; i < 10; i++ )
0020 v[i] = i;
0021 return v; }
0022
0023
0024 int main() {
0025 int *v = foo();
0026 free(v);
0027 return 0;
0028 }

Non riesco a capire per quale motivo e' stato usato un puntatore per dichiarare la funzione foo(). i puntatori a funzione servono quando il programma deve scegliere quale funzione chiamare fra diverse possibili, e la scelta non é definita a priori ma dipende dai dati del programma stesso. Ma qui l'uso della funzione foo () non serve solo per stampare un array con i numeri ordinati da 0 a 1. Perché poi utilizzare una malloc se si già che avrò bisogno di un array di 10 elementi ? Grazie mille in anticipo e come al solito scusate se le domande sono stupide !

LeleFT
23-01-2013, 17:36
Hai preso un abbaglio. :)
In questo caso è solo dichiarata una normalissima funzione che ritorna un puntatore a intero (un vettore di interi) e viene richiamata assegnando il suo risultato, appunto, ad un puntatore ad intero (un vettore di interi).

Qui non si sta ritornando alcun puntatore a funzione. :)



int foo() { ... } // Una funzione che ritorna un valore intero
int* foo() { ... } // Una funzione che ritorna un puntatore ad intero (vettore)


Ciao. :ciauz:

oregon
23-01-2013, 17:36
Qui non ci sono "puntatori a funzione" ma una "funzione che restituisce un puntatore" (sono ovviamente due cose diverse).

Il fatto che siano 10 non importa, potrebbero essere un numero diversi di elementi o si potrebbe passare il numero come parametro della funzione. L'importante è che, se il vettore viene creato all'interno della funzione, questo si possa utilizzare al suo esterno (nel main in questo caso) tramite il puntatore restituito.

Enna90
23-01-2013, 21:09
Grazie!

Loading