흥미로운 인터뷰 운동 결과 : 리턴, 포스트 증가 및 참조 동작
이 질문에 이미 답변이 있습니다.
- 자기 과제 내 포스트 증가 6 답변
다음은 내가 완전히 이해하지 못하는 결과를 반환하는 간단한 콘솔 애플리케이션 코드입니다.
콘솔에서 0, 1 또는 2를 출력하는지 생각해보십시오.
using System;
namespace ConsoleApplication
{
class Program
{
static void Main()
{
int i = 0;
i += Increment(ref i);
Console.WriteLine(i);
Console.ReadLine();
}
static private int Increment(ref int i)
{
return i++;
}
}
}
답은 0입니다.
내가 이해하지 못하는 것은 (전달 된 변수의 사본이 아닌)에서 실행되는 메서드 i++
에서 post increment 가 변수를 증가시키는 이유이지만 나중에 무시됩니다.Increment
ref
제가 의미하는 것은이 비디오에 있습니다.
누군가이 예제를 설명 할 수 있으며 디버그 중에 값이 1로 증가한 것을 보았지만 0으로 돌아가는 이유는 무엇입니까?
i += Increment(ref i);
다음과 같다
i = i + Increment(ref i);
할당의 오른쪽에있는 표현식은 왼쪽에서 오른쪽으로 평가되므로 다음 단계는
i = 0 + Increment(ref i);
return i++
현재 값 i
(0)을 반환 한 다음 증분i
i = 0 + 0;
할당 전에의 값 i
은 1 ( Increment
메소드 에서 증가됨 )이지만 할당으로 다시 0이됩니다.
나는 "마법"여기 그냥 생각
연산 우선 순위
작업의 순서
i += Increment(ref i)
와 같다
i = i + Increment(ref i)
+ 연산은 왼쪽에서 오른쪽으로 실행됩니다.
그래서 먼저 나는 ... 그 당시에는 0입니다 ...
그런 다음 Increment (ref i) ...의 결과를 추가합니다. 또한 0 ... 0 + 0 = 0 ...이지만 결과를 얻기 전에 기다립니다. i가 실제로 증가합니다 ...
that increment takes place after the left operand of our + operation has ben evaluated ... so it does not change a thing ... 0+0 still is 0 ... thus i is assigned 0 after the + operation has been executed
As you mentioned - postincrement "i++". statement - "return i++;" will set the value of 'i' in memory after original value is returned.
try using "return ++i;" and probably you will get it.
'IT Share you' 카테고리의 다른 글
Windows XP에 JDK8 설치-advapi32.dll 오류 (0) | 2020.12.07 |
---|---|
Angular JS에서 Bootstrapping은 무엇을 의미합니까? (0) | 2020.12.07 |
Python Django Rest Framework 순서가 지정되지 않은 ObjectListWarning (0) | 2020.12.07 |
HashSet은 삽입 순서를 유지합니까? (0) | 2020.12.07 |
대리자 대 메서드 호출 성능 (0) | 2020.12.07 |