[Pascal] Zmienna z funkcji i referencja


(fastman92) #1

Chce aby moja funkcja z Pascala miała parameters globalną zmienną, którą może normalnie modyfikować.

W PHP, C++ jest to referencja i znak & przy parametrze funkcji:

bool Increase_string (char &crack, int length)

Wtedy crack może być normalnie modyfikowany i ma wpływ na crack poza. Mam:

function Permutate_string (Text : string; Current_length : integer) : boolean;

Chce, aby zmienna Text miała referencje w funkcji, tak jak w PHP, C++.

Jako return chce true or false...

Pascal function reference w google i nie znalazłem nic ciekawego co do referencji.


(Sawyer47) #2
var name : type

10 sekund szukania w Google

Jest również w trzecim linki pod hasłem "Pascal function reference" w Google


(fastman92) #3

Możesz podać link do tej strony? Trzecią mam http://www.functionx.com/objectpascal/Lesson14.htm

Próbowałem tak:

function Permutate_string (var Text : String; Current_length : integer) : boolean;

Ale wtedy types of actual and formal var parameters must be identical


(Sawyer47) #4

Pokaż jak wywołujesz tę funkcję.


(fastman92) #5
var

Start_string : string[20];

String_length : byte;

Permutate_string (Start_string, String_length);

(Sawyer47) #6

Nie piszę w Pascalu, ale na podstawie komunikatu wnioskuję, że typ musi się dokładnie zgadzać przy przekazywaniu przez referencje, a string[20] to nie to samo co string.


(fastman92) #7

Tylko, że to się kompiluje gdy jest tak:

function Permutate_string (Text : String; Current_length : integer) : boolean;

Bez var przed Text. Tylko wtedy nie ma referencji.


(Sawyer47) #8

Powtórzę, nie piszę w Pascalu, ale to jest całkiem sensowne – gdy argument jest kopiowany można go wydłużyć bo i tak ma swoją pamięć o odpowiednim rozmiarze. Natomiast przez referencję modyfikujesz oryginalną pamięć, więc typ musi się zgadzać dokładnie (abyś nie operował na pamięci nienależącej do przekazanej zmiennej).


(fastman92) #9

Zmieniłem z string[20] na string:

var

Start_string : string;

Potem na string tylko:

function Permutate_string (var Text : String; Current_length : integer) : boolean;

Razem z var. Działa. Text w tej funkcji ma referencje. Problem rozwiązany.

Jednak wcześniej miałem Start_string : string[20] i w funkcji string[20] i nie kompilowało się.


(Sawyer47) #10

A jaki był komunikat w takim przypadku?


(fastman92) #11

Types of actual and formal var parameters must be identical


([alex]) #12

To problem w miejscu z którego wywołujesz:

var S:String;

S:='abc';

Permutate_string(S,3); // tak można

Permutate_string('abc',3); // a tu błąd


(fastman92) #13

Jak można dostać Unix Timestamp do variable w Pascalu? Nie moge tego znaleźć, tylko do daty, godzin, minut, a nie sekund since 1970.

Now variable wygląda, że daje jakieś unexpected values takie jak: 4.056655644591E+0004 zwiększające się z czasem.