SA-MP Forums Archive
Problema con un parametro (&string[]) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Problema con un parametro (&string[]) (/showthread.php?tid=454505)



Problema con un parametro (&string[]) - Nicolas_Castillo - 29.07.2013

Bueno, estoy intentando pasar un valor por una funciуn, y que la modifique pero sin que la retorne

Код:
stock ColocarAlgo(&str[])
{
	//str = "Texto Aqui";
	strmid(str, "Texto Aqui", 0, 10, 10);
}

public OnGameModeExit()
{
	new st[10];
        ColocarAlgo(st);
        print(st);
	return 1;
}
pero me da este error
Код:
error 067: variable cannot be both a reference and an array (variable "str")
y no se como se solucionarнa.

De antemano, Gracias.


Respuesta: Problema con un parametro (&string[]) - Parka - 29.07.2013

pawn Код:
stock ColocarAlgo(str[])
{
    //str = "Texto Aqui";
    strmid(str, "Texto Aqui", 0, 10, 10);
}
que pretendes hacer ??


Respuesta: Problema con un parametro (&string[]) - Nicolas_Castillo - 29.07.2013

Algo como esto:
Quote:
Originally Posted by Dreyfuz
Посмотреть сообщение
pawn Код:
//Esto seria sin el & antes del parametro
main()
{
    new Un_Valor;
    Un_Valor = 100;
   
    Sumar(Un_Valor);//Se envia el valor de la variable, que es 100
    printf("%i", Un_Valor);//Imprime el valor de la variable que es 100(No se modifico en Sumar())
}

stock Sumar(valor)
{
    valor = valor + 100;
}
pawn Код:
//Esto seria con el & antes del parametro
main()
{
    new Un_Valor;
    Un_Valor = 100;

    Sumar(Un_Valor);//Se envia el valor de la variable, que es 100
    printf("%i", Un_Valor);//Imprime el valor de la variable que es 200(Ya que se modifico en Sumar())
}

stock Sumar(&valor)
{
    valor = valor + 100;
}
Pero con strings


Respuesta: Problema con un parametro (&string[]) - Parka - 29.07.2013

Si no me equivoco creo que no se puede ._.


Respuesta: Problema con un parametro (&string[]) - Nicolas_Castillo - 29.07.2013

Wo. Eso seria malo


Respuesta: Problema con un parametro (&string[]) - TheChaoz - 29.07.2013

Lo que tu quieres es pasar por referencia y no por valor.
Para pasar un entero/booleano/decimal o cualquier valor que no sea un array, debes colocar el '&' delante para que dicha variable sea modificada (pasada por referencia), caso contrario no sera modificada.
Ej:
pawn Код:
stock PorValor(value)
{
    value++;

    return 1;
}

stock PorReferencia(&value)
{
    value++;

    return 1;
}

main()
{
    new
        val = 100;
   
    PorValor(val);
    printf("val: %i", val);//Escribira en la consola "val: 100"

    PorReferencia(val);
    printf("val: %i", val);//Escribira en la consola "val: 101"
}
Ahora bien, los arrays son pasados por defecto por referencia, por lo cual si no queremos que estos sean modificados debemos agregar 'const' delante de los mismos.
Ej:
pawn Код:
stock PorValor(const array[])
{
    if(array[0] != '\0')
        array[0] = 'H';//<--- Error de compilacion por intentar modificar un array constante

    return 1;
}

stock PorReferencia(array[])
{
    if(array[0] != '\0')
        array[0] = 'H';

    return 1;
}

public OnFilterScriptInit()
{
    new
        arr[] = "ola";

    PorValor(arr);
    printf("arr: %s", arr);//Escribira en la consola "arr: ola"

    PorReferencia(arr);
    printf("arr: %s", arr);//Escribira en la consola "arr: Hola"
}



Respuesta: Problema con un parametro (&string[]) - Nicolas_Castillo - 29.07.2013

... Todo ese error, solo por tener el & al principio, sol tenia que quitarlo. No sabia que para pasar un string por referencia no era necesario el & antes del parбmetro, aъn me falta mucho en programaciуn.

Gracias Chaoz