sizeof即是关键字,又是运算符。用于获取变量或变量元素的尺寸:
#include <amxmodx>
enum tZombieAppearance
{
_: ZA_MdlPath[64],
_: ZA_BodyId,
_: ZA_SkinId,
bool: ZA_SunkInGround
};
enum tZombieClass
{
_: ZC_Name[32],
_: ZC_Appearance[tZombieAppearance],
_: ZC_MaxHealth,
_: ZC_MaxSpeed,
Float: ZC_EyePos[3]
};
static gCell, gCells[3], gArray[4][3][2], gZombieClass[tZombieClass];
// 断言gCell能储存1个值(单值的尺寸)
#assert (sizeof gCell == 1);
// 断言gCells有3个元素(一维数组的尺寸)
#assert (sizeof gCells == 3);
// 断言gArray有4个元素(三维数组的尺寸)
#assert (sizeof gArray == 4);
// 断言gArray的元素有3个元素(二维数组的尺寸)
#assert (sizeof gArray[] == 3);
// 断言gArray的元素的元素有2个元素(一维数组的尺寸)
#assert (sizeof gArray[][] == 2);
// 断言gArray的元素的元素的元素能储存1个值(单值的尺寸)
#assert (sizeof gArray[][][] == 1);
// 断言gZombieClass的尺寸等于tZombieClass(结构体的尺寸)
#assert (sizeof gZombieClass == _:tZombieClass);
// 断言ZC_Name属性有32个元素(结构体属性的尺寸)
#assert (sizeof gZombieClass[ZC_Name] == 32);
// 断言ZC_Appearance属性的尺寸等于tZombieAppearance(结构体属性的尺寸)
#assert (sizeof gZombieClass[ZC_Appearance] == _:tZombieAppearance);
// 断言ZC_Appearance结构体的ZA_MdlPath属性的尺寸等于64(结构体属性的尺寸)
#assert (sizeof gZombieClass[ZA_MdlPath] == 64);
// 编译失败,语法错误。虽然这符合直觉,但上面的才是正确语法
#assert (sizeof gZombieClass[ZC_Appearance][ZA_MdlPath] == 64);
注意事项:sizeof无法获取不规则数组的元素尺寸。
static gArray[2][] =
{
"We are pests !", // 此元素尺寸为15
"PESTS !" // 此元素尺寸为8
};
// 返回值为0,并且触发警告:"sizeof gArray..."表达式无法获取该数组尺寸
#assert (sizeof gArray[] == 0);