Én a static változóról még annyit hozzátennék, hogy ha egy megadott funkcióban használjuk, akkor nem ugyan az, mint a new.
Nézzünk rá egy példát:
[pawn]
#include <a_samp>
public OnFilterScriptInit()
{
StaticTest();
StaticTest();
StaticTest();
StaticTest();
return 1;
}
stock StaticTest()
{
static
iMyVar;
printf(\"Megmaradt: %d\", iMyVar);
iMyVar = random(0xFF);
printf(\"%d\\n\", iMyVar);
}
[/pawn]
Itt a következõ lesz a kimenet:
[23:52:20] Megmaradt: 0
[23:52:20] 225
[23:52:20] Megmaradt: 225
[23:52:20] 230
[23:52:20] Megmaradt: 230
[23:52:20] 86
[23:52:20] Megmaradt: 86
[23:52:20] 166
new-al pedig:
[23:54:12] Megmaradt: 0
[23:54:12] 80
[23:54:12] Megmaradt: 0
[23:54:12] 202
[23:54:12] Megmaradt: 0
[23:54:12] 236
[23:54:12] Megmaradt: 0
[23:54:12] 34
http://forum.sa-mp.com/showpost.php?p=1594303&postcount=2832A lokálisan létrehozott static változó annyiban külömbözik a globálisan létrehozottól, hogy az nem veszti el az értékét a funkció meghívások között.
sizeof operátor a tömb összes elemére:
public OnFilterScriptInit()
{
new
aMyArray[10][2][3];
aMyArray[0][0][0] = 0; // Ne warningozzon a fordító..
printf(\"aMyArray[%d][%d][%d]\", sizeof(aMyArray), sizeof(aMyArray[]), sizeof(aMyArray[][]));
// sizeof(aMyArray) -> Kiírja a tömb elsõ elemének a méretét
// sizeof(aMyArray[]) -> Második elemének a méretét
// sizeof(aMyArray[][]) -> Harmadik elemének a méretét. Negyediknek pedig nem lehet, mivel max 3 Dimenziós tömböket lehet létrehozni.
return 1;
}