阵列初始化

 

我一直在从mql4指南中学习关于数组的知识,我遇到了一个我有困难的话题;数组的初始化有点令人费解,我不理解下面的语句

"

数组初始化


一个数组只能由相应类型的常量来初始化。一维和多维数组由逗号分隔的一维常量序列来初始化。该序列包含在大括号中。

int Mas_i[3][4] = { 0, 1, 2, 3,   10, 11, 12, 13,   20, 21, 22, 23 };
 
double Mas_d[2][3] = { 0.1, 0.2, -0.3,    -10.2, 1.5, 7.0 };
 
bool Mas_b[5] = { false, true, false, true, true }

"

我对数组只能由相应类型的常量初始化的事实并不感到困惑,但我对数组初始化的概念以及一维序列可以启动多维数组的事实感到困惑。

我对下面的内容感到困惑。

"

在初始化的序列中,可以省略一个或几个常数。在这种情况下,相应的数字类型的数组元素被初始化为0,字符串类型的数组元素被初始化为字符串值""(不带空格的引号),即空行(不应该与空格混淆)。下一个程序显示数组的值,初始化为一个序列,省略了一些值(脚本 arrayalert.mq4

//--------------------------------------------------------------------
// arrayalert.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
int start()                                     // Special funct. start()
  {
   string Mas_s[4] = {"a","b", ,"d"};           // String array
   int Mas_i[6] = { 0,1,2, ,4,5 };              // Integer type array
   Alert(Mas_s[0],Mas_s[1],Mas_s[2],Mas_s[3]);  // Displaying
   Alert(Mas_i[0],Mas_i[1],Mas_i[2],Mas_i[3],Mas_i[4],Mas_i[5]);
   return;                                      // Exit start()
  }
//--------------------------------------------------------------------

"

归根结底,我没有掌握数组初始化的概念。

 

你知道数组的概念吧?一个有多个索引的变量?

所有的初始化都是为所有的索引设置一个起始值。

你可以像你贴出的例子那样为每个索引单独设置一个值,或者。

如果你希望所有索引的初始值都是一样的,你可以像这样一次性输入数值。

int myarray[100]={0};   //initializes all 100 indexes to value zero

或。

int myarray[100][5]={-1}; //multi dimensions, initializes all 500 indexes to -1.

也要注意在mql4书中有一些错误。我认为在第二个例子中,当它说。

"在初始化序列中,一个或几个常数可以被省略。在这种情况下,相应的数字类型的数组元素 被初始化为0,字符串类型的数组元素被初始化为字符串值""(没有空格的引号),也就是一个空行(不应该与空格混淆)。"

然后显示了这个例子。

string Mas_s[4] = {"a","b", ,"d"};           // String array

它可能是指。

string Mas_s[4] = {"a","b","","d"};           // String array
书中还说 "所有数组默认为静态类型",这也是一个错误,它们和其他变量一样,不是静态的,除非定义为静态,除非它们是全局的。
 
SDC:

你知道数组的概念吧?一个有多个索引的变量?

所有的初始化都是为所有的索引设置一个起始值。

如果你想让所有的索引的起始值都是一样的,你可以像这样输入一次值

int myarray[100] {0} //初始化所有100个索引的值为0。


我还是有点疑惑。

所以如果我有一个数组

Double myarray[100]

我已经声明了数组类型(double),数组名称(myarray)和索引数(100)。

是否可以用Double myarray[100] = {1, 2, 3, ....}来分配数组MyArray的值,从而使myarray[1]=1,myarray[2]=2等。

到目前为止,我只是为了从循环中抓取数值而构建数组,即使如此,数组的使用也是非常松散的。

谢谢你,指出了这个错误,澄清了我的一个小问题。

 

第一个数组索引是零,所以如果你这样做。

double myarray[100] = {1,2,3 .....}。

这将使得,myarray[0]==1,myarray[1]==2等等。

 

啊,好吧。

那么,如果我有一个多维数组呢?

Double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5}。(对不起,我注意到我之前用了整数)

我怎样才能调用一个值?

 

你叫它像myarray[index,index]; 或者myarray[index][index]; 做同样的事情。

val = myarray[2,2]; //从数组的索引2,2中获取数值,并将其放入val.

Print(myarray[2,2]); //打印它。

Alert(myarray[2][2]); //提示它。

 

这个值会是什么?

Double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5}。

Myarray[1][3]=?

 
零,因为你没有给它分配任何东西
 

你有3 x 4个数组

double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5} ;

它将像这样填充

Myarray[0,0] = 0.1。

Myarray[0,1] = 0.2;

Myarray[0,2] = 0.3;

Myarray[0,3] = 0.4;

Myarray[1,0] = 0.5。

Myarray[1,1] = 0.0;

Myarray[1,2] = 0.0。

等等

 
array[0,0]怎么会有一个为Myarray[3][4]声明的值?
 

我现在毫无头绪。

Myarray[3][4]不是多维的吗?如果是,为什么我只能通过改变其中一个维度的值来调用数值?