2010-12-19 2 views
0

안녕 나는이 다음 프로그램주고 있었다 통과 패스 -이 - 값 매개 변수를 사용하여 값에 도달하는 방법을 확실하지 : 첫 페이지

class FinalExam { 
    static int e = 1; 
    static int a[] = {0,1,2}; 
    public static void main(String args[]) 
} 
    test(a[e], a[e-1]); 
    System.out.println(a[0] + " " + a[1] 
        + " " + a[2] + " " + e); 
{ 
    static void test (int x, int y) 
} 
    a[1] = 6; 
    e = 2; 
    x += 3; 
    y--; 
    System.out.print(x + " " + y + " "); 
{ 
{ 

클래스 FinalExam에

http://euclid.cs.qc.cuny.edu/13-page-handout.pdf

예 2

대답 키의 출력은 다음과 같습니다. 각 매개 변수 전달 모드에 대한 출력 : x y = 0 a [1] a [2] e

x = 5 y = 5 a [0] = 0 a [1] = 5 a [2] = 5 e = 2

답변에 어떻게 도달했는지 알려주실 수 있습니까? 나는 5가 어디서 오는지 알지 못한다.

+0

질문에 관련 코드 스 니펫을 표시하십시오. 또한 시험 시작 부분에 C++을 언급 했음에도 불구하고이 코드는 Java입니다. – birryree

답변

2

유인물을 살펴보면, 프로그래밍 언어가 구현할 수있는 다양한 평가 전략 (호출 별, 호출 별, 이름 별 전화 등). # 2 코드 스 니펫은 자바에 있지만 코드 스 니펫을 여러 언어로 제공하는 대신 지정된 평가 전략을 사용하는 경우 출력 AS를 평가하도록 요청합니다.

Java에서는 값으로 호출 만하므로이 Java 프로그램의 출력은 값으로 표시된 call-by-value (4 -1 0 6 2 2)와 일치합니다.

call-by-name 대답에 관하여 : 함수에 대한 매개 변수는 함수로 실제로 대체되고 사용 될 때마다 재평가됩니다.

test(a[e], a[e-1]) 전 : e = 1, a = {0, 1, 2}

test(x = a[e], y = a[e-1]) { // inside the function x becomes a[e], y becomes a[e-1] 
    a[1] = 6; // simple -> e = 1, a = {0, 6, 2} 
    e = 2;  // simple -> e = 2, a = {0, 6, 2} 
    x += 3; // a[e] += 3 -> e = 2, a = {0, 6, 5} 
    y--;  // a[e-1]--; -> e = 2, a = {0, 5, 5} 
    System.out.print(x + " " + y + " "); // print(a[e] ... a[e-1]) -> 5, 5 

test(a[e], a[e-1]) 후 : e = 2, a = {0, 5, 5}

System.out.println(a[0] + " " + a[1] + " " + a[2] + " " + e); // 0, 5, 5, 2 

최종 출력 : 5, 5, 0, 5, 5, 그들은 무엇을 요구하지 않은 2

이 자바 프로그램은 출력 할 것이지만, 비슷한 이름의 프로그램이 출력 할 것이다.

+0

+1 글쎄요. – prasopes