2014-02-21 2 views
0

정수 배열의 요소 (전체 배열이 아닌) 만 함수로 전달하면 값 또는 참조로 전달됩니까? 예 -배열에서 배열을 함수로 전달

arr[]={2,3,4,5,6} 
ans=fun(arr[2]) 

과 재미

내가 [2] 메인 함수 나중에, 언 인쇄하면 그때 8 또는 4로 ANS를 얻을 것이다, (2)에 의해 임의의 값을 승산 일부 기능인가? 어떤 도움을 주시면 감사하겠습니다.

+0

작은 예제로 시도해보십시오. – gongzhitaao

+1

값입니다. arr [2]는 4입니다. fun가 정의되었다고 가정하십시오. int fun (int arg) {printf ("% d \ n", arg); return (arg); }, 재미는 4를 인쇄 할 것입니다. – ChuckCottrill

+2

@CommanderCorianderSalamander C는 참조가 없습니다 – gongzhitaao

답변

5

C에는 참조가 없습니다.

int fun(int a) { 
    a = 0; 
} 

int main() { 
    int arr[5] = {2, 3, 4, 5, 6}; 
    fun(arr[2]); 

    printf("%d\n", arr[2]); //prints 4 
    return 0; 
} 

당신은 포인터을 (여전히 값으로 함수에 전달하지만, 그 값은 당신이 관심있는 값의 주소) 전달할 수 있습니다.

int fun(int *a) { 
    *a = 0; 
} 

int main() { 
    int arr[5] = {2, 3, 4, 5, 6}; 
    fun(&arr[2]); 

    printf("%d\n", arr[2]); //prints 0 
    return 0; 
} 

난 당신이 C++를 의미 의심이있다. 이 경우 함수의 서명은 참조로 전달되는지 여부를 결정합니다.

int fun(int &a) { //by reference, because of & 
    *a = 0; 
} 

int main() { 
    int arr[5] = {2, 3, 4, 5, 6}; 
    fun(arr[2]); 

    printf("%d\n", arr[2]); //prints 0 
    return 0; 
} 
1

당신의 질문 c 태그입니다 그래서 내가 그 상황에 응답 할 것이다 : C 언어에서

을 더 통과에 의해 참조가 없습니다. 우리는 포인터를 전달함으로써 참조에 의한 통과와 비슷한 결과를 얻을 수 있습니다.

즉, 포인터를 함수에 전달하지 않으면 호출 범위 내에서 값이 변경되지 않는다고합니다.

void func(int a) 
{ 
    a = a * 2; // value of a within the calling scope does not change (pass-by-value) 
} 

void func2(int *a) 
{ 
    *a = (*a) * 2; // value pointed to by a is changed within the calling scope 
} 
0

C 배열은 첫 번째 요소에 대한 포인터로 전달됩니다. 그것들은 실제로 값으로 전달되지 않는 유일한 요소입니다 (포인터는 값으로 전달되지만 배열은 복사되지 않습니다). 그러면 호출 된 함수가 내용을 수정할 수 있습니다.

어떤 배열을 인수로 전달할 때 중요한 점은 호출 된 함수에서 배열을 처리하는 방법입니다. 전달 된 값 (* val)의 주소를 얻으면 참조로 전달하고 값을 변수로 직접 가져 오는 경우 (val) 다음 값으로 전달과 같이 동작합니다.