16.06.2010, 12:40
это функция компилятора(так же как if, switch,goto и т.д.), и если массив динамичный то, конечно, установка значения размера будет во время работы сервера
Originally Posted by Eakwarp [Valakas.ru
]ты правда так думаешь?)
|
public OnPlayerText(playerid,text[])
{
printf("%d",sizeof(text));
return 1;
}
Originally Posted by [JIeXa
]
это функция компилятора(так же как if, switch,goto и т.д.), и если массив динамичный то, конечно, установка значения размера будет во время работы сервера |
Originally Posted by доки, доки и еще раз доки....
The sizeof operator returns the size of a variable in “elements”. For a
simple (non-compound) variable, the result of sizeof is always 1, because an element is a cell for a simple variable. An array with one dimension holds a number of cells and the sizeof operator returns that number. The snippet below would therefore print “5” at the display, because the array “msg” holds four characters (each in one cell) plus a zero-terminator: Listing: sizeof operator pawn Code:
of elements in each dimension. For the last (minor) dimension, an element will again be a cell, but for the major dimension(s), an element is a sub-array. In the following code snippet, observe that the syntax sizeof matrix refers to the major dimension of the two-dimensional array and the syntax sizeof matrix[] refers to the minor dimension of the array. The values that this snippet prints are 3 and 2 (for the major and minor dimensions respectively): Listing: sizeof operator and multidimensional arrays pawn Code:
convenient when used as a default value for function arguments. |
Originally Posted by оттуда же
results in the size in “elements” of the specified variable. For
simple variables and for arrays with a single dimension, an element is a cell. For multi-dimensional arrays, the result is the number of array elements in that dimension —append [] to the array name to indicate a lower/more minor dimension. If the size of a variable is unknown, the result is zero. When used in a default value for a function argument, the expression is evaluation at the point of the function call, instead of in the function definition. |
#define number 100 main() printf(""#number" %d ", number-1);
number = 99; // Не катит sizeof(arr) = 99; // Тоже не катит
Originally Posted by stepmex
Zeex, во-первых, это русский форум
|
Originally Posted by stepmex
В-вторых, что делает данная функция мы знаем, спор бы о том когда она это делает!
И как я уже доказал выше работает она не в момент компелирования, а в во время работы сервера. Также как и if, switch,goto и т.д. Единственное что исчезает на уровне компилятора это #define и stock |
new test_array[1000];
sizeof(test_array);
;$lcl test_array fffff060
stack fffff060
zero.pri
addr.alt fffff060
fill fa0
; line 7
break ; 2c
const.pri 3e8 // это и есть sizeof(test_array); 3e8 - это 1000 в 16-ричной системе
Originally Posted by JesterX
Кстати, у компилятора есть ещё несколько подобных функций, например tagof. Я не знаю что она делает, пробовал вывести её в разных форматах, но получал либо -INFINITY, либо символ id 1.
|
Originally Posted by MX_Master
sizeof это не функция
|
Функция SizeOf возвращает занимаемый размер (в байтах) переменной (Variable) или типа (Type). |
Originally Posted by stepmex
Quote:
Quote:
|
Originally Posted by stepmex
Zeex, sizeof ни когда и не во что не преобразовывается, это функция сервера, а не компилятора.
|
Originally Posted by stepmex
Если кто-то считает обратное, расскажите принци определения компилятором когда нужно преобразовывать данную функцию в константу, а когда оставлять функцией?
|
Originally Posted by MX_Master
Новый пост, т.к. ваще о другом хочу сказать.
Кто знает и использует оператор char ? Это еще один из способов не транжирить память. Кто юзает, знает о чем я. |
Originally Posted by Fro1sha
Quote:
|
Originally Posted by Fro1sha
Получается только для глобальных переменных это подходит, в локальных так же через new
|
stock isPlayerLogged [ 500 char ];