어레이 초기화

 

mql4 가이드에서 어레이에 대해 배웠는데 문제가 있는 주제를 발견했습니다. 배열 초기화가 약간 어리둥절합니다. 아래 설명을 이해하지 못합니다.

"

배열 초기화


배열은 해당 유형의 상수로만 초기화할 수 있습니다. 1차원 및 다차원 배열은 쉼표로 구분된 1차원 상수 시퀀스로 초기화됩니다. 시퀀스는 중괄호 안에 포함됩니다.

 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 }

"

배열이 해당 유형의 상수로만 초기화될 수 있다는 사실에 혼란스럽지 않지만 배열 초기화의 개념과 1차원 시퀀스가 다차원 배열을 시작할 수 있다는 사실에 대해서는 혼란스럽습니다.

나는 다음과 같이 혼란스러워한다.

"

초기화된 시퀀스에서 하나 이상의 상수를 생략할 수 있습니다. 이러한 경우 숫자 유형의 해당 배열 요소는 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으로 초기화합니다.


권리

나는 아직도 약간 혼란스럽다.

따라서 배열이 있는 경우

이중 myarray[100]

Array 유형(double), Array 이름(myarray) 및 인덱스 수(100)를 선언했습니다.

Double myarray[100] = {1, 2, 3, ....}을 사용하여 배열 MyArray의 값을 할당하여 myarray[1]=1 및 myarray[2]=2 ect가 되도록 할 수 있습니까?

지금까지 루프에서 값을 가져오기 위한 목적으로 배열만 구성했으며 그 후에도 배열은 매우 느슨하게 사용되었습니다.

고마워, 그 실수를 지적함으로써 내가 가지고 있던 사소한 질문이 해결되었습니다.

 

첫 번째 배열 인덱스는 0이므로 그렇게 하면

이중 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[인덱스][인덱스]; 같은 일을합니다.

발 = myarray[2,2]; //배열 인덱스 2,2에서 값을 가져와 val에 넣습니다.

인쇄(myarray[2,2]); //출력한다

경고(myarray[2][2]); //알림

 

값은 어떻게 될까요?

이중 Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5}

마이어레이[1][3]=?

 
아무 것도 할당하지 않았기 때문에 0
 

3 x 4 어레이가 있습니다.

이중 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]는 다차원이 아닙니다. 그렇다면 왜 차원 중 하나의 값을 변경하여 값을 호출할 수 있습니까?