Otóż jako, że dawno tu nie wtrącałem swoich trzech groszy, a właśnie przez własną pomyłkę wpadłem na sposób (kombinowałem i zapomniałem dopisać na początku 'public' ) jak zwracać zmienne przez referencje, postanowiłem napisać poradnik.
public test(id)
{
new num=0,slowo[7]
sprawdz(num,slowo)
client_print(id,print_chat,"num=%d | slowo:%s",num,slowo)
return 1
}
sprawdz(&num,slowo[])
{
num=16
add (slowo,6,"123456")
return 0
}
Oczywiście Graczowi zostanie wypisane to co w funkcji sprawdz() ustalono.
Warunki działania:
1)Deklaracja funkcji nie zawiera przedrostka
public
sprawdz(&num,slowo[]) // DOBRZE!!!
public sprawdz(&num,slowo[]) // ŹLE!!!
2)Każda zmienna typu integer musi mieć przed nazwą znaczek
&
sprawdz(&num,slowo[]) // DOBRZE!!!
sprawdz(num,slowo[]) // ŹLE!!!
Chociaż w drugim przypadku sama konstrukcja funkcji jest poprawna, jednak zmienna num zostanie jedynie przyjęta do funkcji jako parametr, ale w przypadku zmiany jej wartości wewnątrz funkcji "sprawdz" nie zostanie ona przekazana do funkcji "test" (jej wartość w funkcji test nie ulegnie zmianie).
3)Każda zmienna typu string (ciąg znaków char[]) nie może być poprzedzona znakiem
&ponieważ kompilator wywali błąd. Mimo braku owego znaczka wartość zostanie zwrócona przez referencję do wnętrza unkcji "test"
Oczywiście zmienna typu char[] może mieć określoną liczbę znaków, na przykład:
sprawdz(&num,slowo[15]) // DOBRZE!!!
Nie jestem pewny, ale chyba nie ma narzuconej kolejności, że np. najpierw muszą być parametry zwykłe, a później te, które coś zwracają przez referencję. Gdyby jednak się okazało, że są jakieś błędy przy kompilacji lub po kompilacji w czasie używania coś jest nietak, są jakieś błędy, to prawdopodobnie trzeba umieścić najpierw zmienne niereferencyjne, a później referencyjne, na przykład:
sprawdz(param1,&num,slowo[]) // DOBRZE!!!
ale raczej wydaje mi się, że kolejność jest bez znaczenia.