2012-03-31 3 views
1

제 프로그래밍 언어 클래스의 경우 이름 통과 및 결과에 의한 전달 방법을 이해하려고합니다. 나는 이것이 주류 언어에서 전혀 사용되지 않는다는 것을 알지만, 나는 그들이 일하는 방식에 대한 느낌을 얻고 싶다. 예 (불가지론 언어)로서 :이름으로 전달 및 결과 값 전달

void swap(int a, int b){ 
    int t; 
    t = a; 
    a = b; 
    b = t; 
} 
void main() { 
    int val = 1, list[5] = {1, 2, 3, 4, 5} 
    swap(val, list[val]); 
} 

요구되는 어떤 브로 값리스트와 스왑 후 것 모두 값 - 결과 - 통과 통과하여 이름.

설명이 너무 좋을 것입니다.

내가 추론 한 바에 따르면, val-result : val = 2, list = {1,1,3,4,5} 및 name : val = 3, list = {1,2,1,4, 5}. 나는 그 결과에 대해 매우 확신하지 못한다.

배열이 하나의 int와는 반대로 전달 될 때이 두 가지 방법이 모두 작동하는 방식이 변경됩니까? 사전에 도움을 주셔서 감사합니다.

답변

0

참조로 전달하면 이름으로 전달하면 결과는 값과 같습니다.
val과 list position val 사이의 참조 만 바꾸기 때문입니다. 배열 참조를 전달하지 않습니다. var를 값이 들어있는 메모리 블록에 대한 포인터로 생각하십시오.

0

이 코드는 이름 으로 패스의 문제 중 하나 설명이 스왑이있는

당신이 발은 발에 변경 볼 수

void swap(int a, int b){ 
    int t; 
    t = a; //t=val; t=1 
    a = b;// val=list[val]; val=list[1]=2 
    b = t;// list[val]=t; list[2]=1 
} 
void main() { 
    int val = 1, list[5] = {1, 2, 3, 4, 5} 
    swap(val, list[val]); 
} 

일이 무엇인가 이유 = 목록 [발] 그것을 당신이 가치 결과에 의해 더 이상 패스로

을 통과 같은 발 아닙니다

void swap(int a=1, int b=2){ 
    int t; 
    t = a; //a=1 so t=1 
    a = b; //b=2 so a=2 
    b = t; //b=1 so it and it return the right parameter so list[1]=2 
} 

도움이 되었기를 바랍니다.