찻주전자의 질문 - 페이지 123

 
papaklass :

 MqlRates mrate[];//массив нулевого размера

ArrayResize 및 ArrayInitialize 사용. 무엇을 위한 것인지 명확하지 않습니다.

일반적으로 CopyRates와 함께 이 구조가 사용됩니다.

 
papaklass :

Renat는 다음과 같이 하는 것이 더 낫다고 말했습니다.

 MqlRates mrate[] = { 0 };     //структура для хранения информации о ценах, объемах и спреде.

그것을 알아 내려고합시다. 내가 기억하는 한, Renat은 배열이 아닌 단순 변수의 초기화에 대해 이야기했습니다. 전투에서 유사한 예가 핸드북에 나타났습니다.

 //--- инициализация всех полей структуры нулевым значением
MqlTradeRequest request={ 0 };

선언에서 초기화를 시도할 때 단순 변수 대신 배열이 수행됩니다. 핸드북에서 이 예를 찾았습니다.

 double f[]     = { 0.0 , 0.236 , 0.382 , 0.5 , 0.618 , 1.0 };

Если размер инициализируемого массива не указан, то он 
определяется компилятором, исходя из размера инициализирующей последовательности.

여기서 배열은 유한한 수의 값으로 초기화되며 설명에 따라 컴파일러는 이러한 값의 수를 기반으로 이러한 배열의 크기를 결정합니다. 게으름을 확인하려면 예에서 f[] 배열의 크기가 6과 같을 가능성이 큽니다.

귀하의 예에서 초기화 시퀀스 {0}의 크기는 1입니다. 따라서 컴파일러는 대부분 mrate[] 배열의 크기를 1로 결정합니다. 여기서 관심을 끌기 위해 다음과 같이 지정합니다.

 MqlRates mrate[] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };     //структура для хранения информации о ценах, объемах и спреде.
오류가 발생합니까?
 
papaklass :
내가 망쳤어. 백조가 명확하게 설명했습니다. 구조를 잘못 잡았습니다. 초기화할 필요가 전혀 없기 때문에 가치가 필요합니다. 값을 제공하는 항목을 초기화해야 합니다. 내가 틀렸어.

글쎄, 중요한 것은 이해된다. Renat 자체에 대한 질문이 재미있어져서 저도 알아냈습니다.

 

이중 f[] = {0.0, 0.236, 0.382, 0.5, 0.618, 1.0}; 동적 배열이 아닙니다.

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
220Volt :

이중 f[] = {0.0, 0.236, 0.382, 0.5, 0.618, 1.0}; 비동적 배열.

double f[]는 그 자체로 동적 배열입니다. 창조 때에 선언된 분은 바로 그분이시다. 최종 초기화 시퀀스 로 초기화한 후 동적이 중지되는지 여부는 조사되지 않았습니다. 위에서 알아낸 주요 사실은 초기화 후 선언된 배열이 특정 크기를 획득한다는 것입니다.

동적 배열은 명시적 초기화의 결과로 동적 배열을 중단한다고 말하고 싶습니다. 동적 상태와 속성을 잃습니까? - 그럴지도 몰라. 그러나 나는 그것을 의심한다. 질문: 동적 배열 double f[]가 1이 아닌 이유는 무엇입니까?

 
Yedelkin :

double f[]는 그 자체로 동적 배열입니다. 창조 때에 선언된 분은 바로 그분이시다. 최종 초기화 시퀀스 로 초기화한 후 동적이 중지되는지 여부는 조사되지 않았습니다. 위에서 알아낸 주요 사실은 초기화 후 선언된 배열이 특정 크기를 획득한다는 것입니다.

동적 배열은 명시적 초기화의 결과로 동적 배열을 중단한다고 말하고 싶습니다. 동적 상태와 속성을 잃습니까? - 그럴지도 몰라. 그렇다면 질문은: 왜?

문제는 MKL에 있는 우리가 실제 사례에서 약간 "격리"되어 있다는 것입니다.)) 컴파일러는 그러한 상황에서 우리를 위해 결정합니다. 그가 본다면:

 double f[5];
double f[] = { 0 , 1 , 3 };

정적 배열을 생성합니다(크기 조정 불가). 그가 본다면:

 double f[];

전역 메모리에 MqlArrayObject 구조체(동적 배열처럼 동작)를 만듭니다. 따라서 선언 후에 배열을 초기화할 수 없습니다( double f[]; f = {6};)

추신 : 작성된 모든 것은 내 IMHO이며 어딘가에 틀릴 수 있습니다.

 

찻주전자의 질문: 컴파일러가 행을 보면 정말입니까?

 double f[] = { 0 , 1 , 3 };

그런 다음 처음에는 동적 배열이 아니라 정적 배열을 생성했습니까?

" 동적 배열( 첫 번째 대괄호 쌍에 값이 지정되지 않은 배열)을 선언할 때 컴파일러는 자동으로 구조 변수 struct MqlArrayObject (동적 배열 객체)를 생성하고 적절한 초기화를 위한 코드를 제공합니다 ." 아니면 최종 초기화 시퀀스 의 존재가 "배열의 모든 중요한 차원을 명시적으로 지정"하고 정적 배열을 생성하는 것과 동일합니까?

 
Yedelkin :

찻주전자의 질문: 컴파일러가 행을 보면 정말 입니까?

그런 다음 처음에는 동적이 아니라 정적 배열을 생성했습니까?

" 동적 배열( 첫 번째 대괄호 쌍에 값이 지정되지 않은 배열)을 선언할 때 컴파일러는 자동으로 구조 변수 struct MqlArrayObject (동적 배열 객체)를 생성하고 적절한 초기화를 위한 코드를 제공합니다 ." 아니면 최종 초기화 시퀀스 의 존재가 "배열의 모든 중요한 차원을 명시적으로 지정"하고 정적 배열을 생성하는 것과 동일합니까?

확인이 어렵나요?

;)

 
MetaDriver :

확인이 어렵나요?

;)

현재 약합니다. 저녁에만 터미널에 가겠습니다. 그렇지 않으면 220Volt에 대한 내 대답이 다르게 들렸을 것입니다. :) 디렉토리에서 정보를 찾지 못했습니다. 내가 잘못 검색했을 수도 있지만 세심하게.
 
Yedelkin :
현재 약합니다. 저녁에만 터미널에 가겠습니다. 그렇지 않으면 220Volt에 대한 내 대답이 다르게 들렸을 것입니다. :) 디렉토리에서 정보를 찾지 못했습니다. 내가 잘못 검색했을 수도 있지만 세심하게.

알았어, 내렸어. :) 나도 터미널 밖으로.

그것은 기본적으로 검사됩니다 - ArrayResize(...)를 사용 하려는 시도

Документация по MQL5: Операции с массивами / ArrayResize
Документация по MQL5: Операции с массивами / ArrayResize
  • www.mql5.com
Операции с массивами / ArrayResize - Документация по MQL5