Passar paràmetres per referència amb C
Salta a la navegació
Salta a la cerca
Com sempre, no convé abusar de les variables globals. Passar paràmetres per referència és la manera de tenir definida una variable localment, per ex char *vid_foto_flickr; en el segon exemple, i aquesta variable la passo per referència a d'altres procediments o funcions, on allà es pot canviar el valor de la variable. Aquest aclariment respon a un cas real quan estava programant amb l'API de Flickr, en què la variable vid_foto_flickr no es passa una vegada, sinó dues (fa dos salts), amb la qual cosa s'organitza un embolic que s'ha de desembolicar. Un cop aclarit, s'ha utilitzat a upload2flickr.c
aclaratori_punters.c:
//$ gcc -o aclaratori_punters aclaratori_punters.c // hi ha diferència de sintaxi entre fer-ho amb C i amb C++: //http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr233.htm #include <stdio.h> char * crida_funcio (char *, int *, char *, char **); int main(int argc, char *argv[]) { char *var1; int val1; char var2; char *var3; char *res; var1="hola1"; val1=10; var2='h'; var3="camió"; res = crida_funcio(var1, &val1, &var2, &var3); printf("%s %d %c %s\n", res, val1, var2, var3); } char *crida_funcio(char *v1, int *valor, char *v2, char **v3) { char *a2; printf("aaa %d\n",*valor); a2=v1; *valor=5; *v2='a'; *v3="bicicleta"; return a2; }
aclaratori_punters2.c:
//$ gcc -o aclaratori_punters aclaratori_punters.c // hi ha diferència de sintaxi entre fer-ho amb C i amb C++: //http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr233.htm #include <stdio.h> int command_upload(char **); int print_upload_status(char ***); int main(int argc, char *argv[]) { char *vid_foto_flickr; int res; vid_foto_flickr="cotxe"; printf("%s\n", vid_foto_flickr); res = command_upload(&vid_foto_flickr); printf("%s\n", vid_foto_flickr); } int command_upload(char **vid_foto_flickr_a) { int res; *vid_foto_flickr_a="bicicleta"; printf("--%s\n",*vid_foto_flickr_a); res = print_upload_status(&vid_foto_flickr_a); printf("---%s\n",*vid_foto_flickr_a); return 1; } int print_upload_status(char ***vid_foto_flickr_b) { **vid_foto_flickr_b="moto"; printf("--%s\n",**vid_foto_flickr_b); return 1; }
creat per Joan Quintana Compte, abril 2012