변수 초기화

정의하는 동안 모든 변수를 초기화할 수 있습니다. 변수가 명시적으로 초기화되지 않은 경우 이 변수에 저장된 값은 임의의 값이 될 수 있습니다. 암시적 초기화가 사용되지 않습니다.

전역정적 변수는 해당 유형의 상수 또는 상수 식을 통해서만 초기화할 수 있습니다. 로컬 변수는 상수가 아닌 임의의 식을 사용하여 초기화할 수 있습니다.

전역 및 정적 변수의 초기화는 한 번만 수행됩니다. 해당 함수를 호출할 때마다 로컬 변수가 초기화됩니다.

예제:

int    n       = 1;
string s       = "hello";
double f[]     = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
int    a[4][4] = { {1, 1, 1, 1}, {2, 2, 2, 2}, {3, 3, 3, 3}, {4, 4, 4, 4 } };
//--- 테트리스에서
int    right[4]={WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER,
                 WIDTH_IN_PIXELS+VERT_BORDER,WIDTH_IN_PIXELS+VERT_BORDER};
//--- 값이 0인 구조의 모든 필드 초기화
MqlTradeRequest request={0};

배열 요소의 값 목록은 대괄호로 묶어야 합니다. 누락된 초기화 시퀀스는 0으로 간주됩니다. 초기화 시퀀스에는 하나 이상의 값이 있어야 합니다. 이 값은 해당 구조 또는 배열의 첫 번째 요소로 초기화되고 누락된 요소는 0과 같은 것으로 간주됩니다.

초기화된 배열의 크기를 지정하지 않으면 초기화 시퀀스의 크기에 따라 컴파일러에 의해 결정됩니다. 1차원 배열은 하나의 초기화 요소(0, 규칙)만 지정된 경우를 제외하고 1차원 시퀀스(추가 곱슬괄호가 없는 시퀀스)로 초기화할 수 없습니다.

로컬 수준에서 발표된 배열을 포함한 배열은 상수로만 초기화할 수 있습니다.

예제:

struct str3
  {
   int               low_part;
   int               high_part;
  };
struct str10
  {
   str3              s3;
   double            d1[10];
   int               i3;
  };
void OnStart()
  {
   str10 s10_1={{1,0},{1.0,2.1,3.2,4.4,5.3,6.1,7.8,8.7,9.2,10.0},100};
   str10 s10_2={{1,0},{0},100};
   str10 s10_3={{1,0},{1.0}};
//---
   Print("1.  s10_1.d1[5] = ",s10_1.d1[5]);
   Print("2.  s10_2.d1[5] = ",s10_2.d1[5]);
   Print("3.  s10_3.d1[5] = ",s10_3.d1[5]);
   Print("4.  s10_3.d1[0] = ",s10_3.d1[0]);
  }

 
구조 유형 변수의 경우 정적 배열(암묵적으로 설정된 크기)뿐만 아니라 부분 초기화가 허용됩니다. 구조 또는 배열의 첫 번째 요소를 하나 이상 초기화할 수 있으며, 이 경우 다른 요소는 0으로 초기화됩니다.

더 보기

데이터 유형, 유형의 캡슐화 및 확장성, 가시성 범위 및 변수 수명, 객체 생성 및 삭제