前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MQL5从入门到精通【第二章】变量与数据类型(二)

MQL5从入门到精通【第二章】变量与数据类型(二)

作者头像
程序员小助手
发布2020-04-08 11:18:12
1.1K0
发布2020-04-08 11:18:12
举报
文章被收录于专栏:程序员小助手

书接上回。

# 数组 Array

我们讲了变量和数据类型,都是单个的变量,及其值。那么这个数组,是用来装载多个数据的一种结构。你可以把数组想象为一个数字列表,每个数字对应不同的值。可以从头按照数字遍历这个列表,并获取其相对应的值。

下例是数组的声明和赋值。

代码语言:javascript
复制
int myArray[3];
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;

这种的我们成为静态数组,声明的时候,给定了数字元素的长度,并对其单个索引,赋予相应数值。声明中[3]表示数组长度=3,int表示数组内元素均是int型。上例用的是挨个给数组元素赋值,其实还有一种写法:

代码语言:javascript
复制
int myArray[3] = {1,2,3};

这种写法的好处是不占地方,简洁美观。

如果声明了数组,其初始值是多少呢。得看数组元素的数据类型,本例中int型,那就是0。

数组的起始索引位置=0。这是主流编程语言的通用做法。最大索引值当然就是size-1。如果越界了呢?

代码语言:javascript
复制
int myArray[3];
myArray[3] = 21;
// 这个就是错误的。最大索引位置3-1=2.索引3就越界了,编译不通过。

静态数组的缺点是,数组长度不能变化。当你事先不能确定数组的长度时,应使用动态数组声明。动态数组,可以更具需要长度进行伸缩。【注意是伸缩,可短可长】。ArrayResize函数就是用来给数组伸缩长度的。

代码语言:javascript
复制
double myDynamic[];
ArrayResize(myDynamic,3);
myDynamic[0] = 1.50;

注意,动态数组声明时,[]内不能显式指定长度。函数ArrayResize给数组伸缩长度后,就可以对其进行赋值操作了。

# 多维数组 Multi-Dimensional Arrays

上面说的,都是一维数组。一列值,很线性。接着说多维数组,先从二维数组说起。说白了,你可以把二位数组理解为一张excel表,有行有列,然后用行列索引号,就能定位到某个单元格,这时就可以对该单元格进行操作。MQL5的二位数组原理是一样的。

代码语言:javascript
复制
double myDimension[3][3];
myDimension[0][1] = 1.35;

声明一个3行3列的元素。并对其[0][1]元素进行赋值。注意,多维数组不过是对一维数组的扩充,遵循数组定义的所有特性。比如索引起始位置=0。

当然了,上述例子是静态的多维数组。也肯定有动态的多维数组。

代码语言:javascript
复制
double myDimension[][3]; // 指定不确定数量的数组,且每个数组的长度=3
int rows = 5;
ArrayResize(myDimension, rows); // 为数组指定行数=5.

# 数组遍历

数组允许你较为简单地遍历一个数据集。

代码语言:javascript
复制
string myArray[3] = {"cheese","bread","ale"};
for(int index = 0; index < 3; index++)
{
    Print(myArray[index]);
}

for循环,程序里用的就太多了,必知必会。我们使用临时变量index控制循环层数。然后根据这个索引值,逐一取出myArray数组的值。

其中,index < 3,是限制了长度,3=数组长度。这是我们预先知道了数组长度,如果不知道呢?如果数组长度不确定,且数值很大呢?MQL5给我们提供了ArraySize函数,用于获取数组的长度。

代码语言:javascript
复制
int myDynamic[];
ArrayResize(myDynamic,10);
int size = ArraySize(myDynamic);
for(int i = 0; i < size; i++)
{
    myDynamic[i] = i;
    Print(i); // 输出: 0, 1, 2... 9
}

上例中,使用ArraySize获取数组长度,并赋值给变量size。for循环使用 i < size 控制循环层级。与静态数据遍历原理相同。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 数组 Array
  • # 多维数组 Multi-Dimensional Arrays
  • # 数组遍历
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档