IT Share you

흥미로운 인터뷰 운동 결과 : 리턴, 포스트 증가 및 참조 동작

shareyou 2020. 12. 7. 21:13
반응형

흥미로운 인터뷰 운동 결과 : 리턴, 포스트 증가 및 참조 동작


이 질문에 이미 답변이 있습니다.

다음은 내가 완전히 이해하지 못하는 결과를 반환하는 간단한 콘솔 애플리케이션 코드입니다.

콘솔에서 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 가 변수를 증가시키는 이유이지만 나중에 무시됩니다.Incrementref

제가 의미하는 것은이 비디오에 있습니다.

누군가이 예제를 설명 할 수 있으며 디버그 중에 값이 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.

참고URL : https://stackoverflow.com/questions/43539718/interesting-interview-exercise-result-return-post-increment-and-ref-behavior

반응형