Variables
变量
声明变量
变量必须在使用之前进行声明。使用唯一名称来标识变量。要声明一个变量,必须指定其类型和唯一名称。变量的声明不是一种运算符。
简单类型包括:
- char, short, int, long, uchar, ushort, uint, ulong – 整数;
- color – 表示RGB颜色的整数;
- datetime – 日期和时间,一个无符号整数,包含自1970年1月1日0点以来经过的秒数;
- bool – 布尔值,true和false;
- double – 双精度浮点数;
- float – 单精度浮点数;
- string – 字符字符串。
示例:
string szInfoBox;
int nOrders;
double dSymbolPrice;
bool bLog;
datetime tBegin_Data = D'2004.01.01 00:00';
color cModify_Color = C'0x44,0xB9,0xE6';复杂或复合类型包括:
结构体是使用其他类型构建的复合数据类型。
struct MyTime
{
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
};
...
MyTime strTime; // Variable of the previously declared structure MyTime
在声明结构体之前,不能声明结构体类型的变量。
数组
数组是相同类型数据的索引序列:
int a[50]; // One-dimensional array of 50 integers.
double m[7][50]; // Two-dimensional array of seven arrays,
// each of them consisting of 50 numbers.
MyTime t[100]; // Array containing elements such as MyTime
只有整数可以作为数组索引。不允许有超过四维的数组。数组元素的编号从0开始。一维数组的最后一个元素编号比数组大小少1。这意味着由50个整数组成的一维数组的最后一个元素的调用将显示为a[49]。多维数组也是如此:维度的索引从0到维度大小-1。二维数组的最后一个元素将显示为m[6][49]。
静态数组不能表示为时间序列,即,ArraySetAsSeries()函数,该函数将数组元素的访问从末尾开始到开头,不能应用于它们。如果你想提供与timeseries中相同的数组访问方式,请使用dynamic array object。
如果尝试访问超出数组范围的内容,执行子系统将生成严重错误,程序将停止。
访问说明符
访问说明符定义编译器如何访问变量、结构或类的成员。
const说明符将变量声明为常量,不允许在运行时更改此变量。声明变量时只允许一次初始化。
示例:
int OnCalculate (const int rates_total, // size of input time series
const int prev_calculated, // bars handled in previous call
const datetime& time[], // Time
const double& open[], // Open
const double& high[], // High
const double& low[], // Low
const double& close[], // Close
const long& tick_volume[], // Tick Volume
const long& volume[], // Real Volume
const int& spread[] // Spread
);要访问结构类和类的成员,请使用以下说明符:
- public – 允许无限制地访问变量或类方法
- protected – 允许从本类的方法以及公开继承类的其他方法访问。其他访问是不可能的;
- private – 仅允许从同一类的方法访问变量和类方法。
- virtual – 仅适用于类方法(不适用于结构方法),并告诉编译器应将此方法放在类的虚拟函数表中。
存储类
有三种存储类:static、input和extern。这些存储类修饰符明确指示编译器相应的变量分布在预分配的内存区域中,称为全局池。此外,这些修饰符指示对变量数据的特殊处理。如果在局部级别声明的变量不是static的,则此类变量的内存将在程序栈上自动分配。当超出声明数组的块可见范围时,非静态数组所分配的内存也将自动释放。
另请参阅
最后更新于