내가 이해하는 한, 우리가 입력 변수의 값을 사용하려고 하지 않는 동안 이 값은 NULL이 될 것이지만, 그 순간에 이 입력 변수의 값을 다른 변수에 할당하거나 단순히 이 입력 변수를 인쇄하려고 하면 , 이 NULL은 사라집니다. 즉 . 이 입력 문자열 변수 에 메모리가 할당됩니다 .
내가 이해하는 한, 우리가 입력 변수의 값을 사용하려고 하지 않는 동안 이 값은 NULL이 될 것이지만, 그 순간에 이 입력 변수의 값을 다른 변수에 할당하거나 단순히 이 입력 변수를 인쇄하려고 하면 , 이 NULL은 사라집니다. 즉 . 이 입력 문자열 변수 에 메모리가 할당됩니다 .
예, 아마도 그러한 행동은 "바보로부터의 보호"일 것입니다. 입력 변수 를 초기화해야 한다는 사실을 고려할 때 변수가 메모리에서 이미 1바이트 이상을 차지할 때 input = NULL 은 인위적으로 ="" 와 동일하게 지정됨을 알 수 있습니다.
MQL5 항목:
절대적으로 동일합니다. 변수에 할당된 메모리가 없습니다. 아무튼 별 차이를 못 느꼈습니다. 예를 들어 자바에서는 두 경우 모두 변수에 할당된 메모리가 없음에도 불구하고 이러한 항목에는 약간의 차이가 있습니다. 변수에 할당된 메모리가 없지만 첫 번째 옵션(String str = null;)은 초기화된 것으로 간주되며 변수는 비어 있는 것으로 인쇄될 수 있습니다. 그리고 두 번째 경우(String str;)는 변수를 출력하려고 하면 초기화되지 않은 변수에 대한 오류가 발생합니다. 저것들. MQL5는 이 점에서 더 관대합니다. 어느 쪽이 더 나은지 저도 잘 모르겠습니다.
어떻게 변수에 메모리가 할당되지 않습니까? 메모리가 할당되고 변수에 임의의 쓰레기가 포함됩니다. 그리고 문자열에 값이 표시되지 않는다는 사실은 버퍼가 비어 있는 것이 논리적입니다.
2020.01.27 01:15:57.859 tst (EURUSD,H1) (널) , 0.000000 , 0
유형 캐스팅 을 제거하면 'NULL' 오류가 발생합니다. 'void' 유형의 표현식이 잘못되었습니다.
흥미롭게도 nput 문자열을 void로 초기화할 수 있음이 밝혀졌습니다.
NULL - 초기화. 의도적으로 이 예제는 비입력 문자열을 보여줍니다.
NULL / NIL(다른 용어로)은 문자열 상수 엔터티의 초기화가 될 수 없습니다.
적어도 mql 문자열은 C에서와 같이 "포인터"가 아니기 때문입니다. "아무것도 없음"이라는 특별한 상태가 없습니다.
추신 (아, 어떻게, 나는 이것을 나 자신에게서 기대하지 않았다)
그녀는 "전혀"라는 특별한 상태가 없습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
mql5 언어의 특징, 미묘함 및 작업 방법
fxsaber , 2020.01.26 15:54
나는 매일 이 상태를 사용한다.
적어도 mql 문자열은 C에서와 같이 "포인터"가 아니기 때문입니다. "아무것도 없음"이라는 특별한 상태가 없습니다.
추신 (아, 어떻게, 나는 이것을 나 자신에게서 기대하지 않았다)
아아, 아니요, MQL의 문자열은 할당된 메모리가 있는 엔터티입니다. @Ilyas 는 StringBufferLen()이 문자열의 길이를 표시하지 않을 수 있지만 문자열을 저장하기 위해 할당된 메모리를 정확히 표시하는 이유를 설명했습니다.
나는 매일 이 상태를 사용한다.
표시기가 전혀 아니라 StringConcatenate()를 사용하여 MQL4의 모든 객체에 대한 포인터를 인쇄했습니다. 내장 함수의 작업은 MQL 규칙에 따라 구현되지 않습니다)))
표시기가 전혀 아니라 StringConcatenate()를 사용하여 MQL4의 모든 객체에 대한 포인터를 인쇄했습니다. 내장 함수의 작업은 MQL 규칙에 따라 구현되지 않습니다)))
내부가 어떻든 상관없습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
mql5 언어의 특징, 미묘함 및 작업 방법
이고르 마카누 , 2020.01.26 22:27
내부가 어떻든 상관없습니다.
귀하의 사례로 내 게시물을 업데이트했습니다.
또한 입력 문자열 s = NULL로 몇 번 실험했습니다.
내가 이해하는 한, 우리가 입력 변수의 값을 사용하려고 하지 않는 동안 이 값은 NULL이 될 것이지만, 그 순간에 이 입력 변수의 값을 다른 변수에 할당하거나 단순히 이 입력 변수를 인쇄하려고 하면 , 이 NULL은 사라집니다. 즉 . 이 입력 문자열 변수 에 메모리가 할당됩니다 .
내가 이해하는 한, 우리가 입력 변수의 값을 사용하려고 하지 않는 동안 이 값은 NULL이 될 것이지만, 그 순간에 이 입력 변수의 값을 다른 변수에 할당하거나 단순히 이 입력 변수를 인쇄하려고 하면 , 이 NULL은 사라집니다. 즉 . 이 입력 문자열 변수 에 메모리가 할당됩니다 .
입력 변수의 작동 메커니즘은 위에서 자세히 설명했습니다.
내부가 어떻든 상관없습니다.
(여전히) 역참조 엔터티의 작업(관계)의 세부 사항이 있습니다(mql에는 포인터가 없고 C가 아닙니다. 엔터티가 있어야 함)
입력은 시작할 때 선언된 그러한 const입니다. 물리적으로 "NOTHING" 값을 지정할 수 없습니다.
const string nothing=NULL; /// <--- ЭТО ЧТО ?
예, 아마도 그러한 행동은 "바보로부터의 보호"일 것입니다.
입력 변수 를 초기화해야 한다는 사실을 고려할 때 변수가 메모리에서 이미 1바이트 이상을 차지할 때 input = NULL 은 인위적으로 ="" 와 동일하게 지정됨을 알 수 있습니다.
MQL5 항목:
절대적으로 동일합니다. 변수에 할당된 메모리가 없습니다. 아무튼 별 차이를 못 느꼈습니다.
예를 들어 자바에서는 두 경우 모두 변수에 할당된 메모리가 없음에도 불구하고 이러한 항목에는 약간의 차이가 있습니다. 변수에 할당된 메모리가 없지만 첫 번째 옵션(String str = null;)은 초기화된 것으로 간주되며 변수는 비어 있는 것으로 인쇄될 수 있습니다. 그리고 두 번째 경우(String str;)는 변수를 출력하려고 하면 초기화되지 않은 변수에 대한 오류가 발생합니다.
저것들. MQL5는 이 점에서 더 관대합니다.
어느 쪽이 더 나은지 저도 잘 모르겠습니다.
어떻게 변수에 메모리가 할당되지 않습니까?
메모리가 할당되고 변수에 임의의 쓰레기가 포함됩니다.
그리고 문자열에 값이 표시되지 않는다는 사실은 버퍼가 비어 있는 것이 논리적입니다.
어떻게 변수에 메모리가 할당되지 않습니까?
메모리가 할당되었지만 변수에 임의의 쓰레기가 포함되어 있지 않습니다.
그리고 문자열에 값이 표시되지 않는다는 사실은 버퍼가 비어 있는 것이 논리적입니다.