Passar paràmetres per referència amb C

De Wikijoan
Dreceres ràpides: navegació, 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

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines