2012-12-07 2 views
0
void revalue(int r, int ar[], int n) 
{ 
    for(int i=0; i<n;i++) 
    { 
     ar[i]*=r; 
    } 
} 

그래서이 코드의 작동 방식과 ar [] 변경 이유와 정말로 혼동 스럽습니다. 문제는 참조 또는 포인터가 아닌 변수를 함수에 전달할 때마다 변수의 복사본이 만들어지고 함수의 범위를 벗어나면 복사본이 삭제된다고 생각하는 것입니다. 그러나이 함수는 배열 값을 변경합니다.이 배열 조작은 C++에서 어떻게 작동합니까?

어떻게 가능합니까?

+0

기본적으로 배열은 포인터가됩니다. – BoBTFish

답변

0

배열은 배열의 첫 번째 요소에 대한 포인터로 조정되는 C++에서 기본적으로 참조로 전달됩니다.

+0

"by reference"는주의해서 사용해야합니다. 배열은 C++에서 참조로 쉽게 참조 할 수 있으며, 배열에 대한 참조를 받아 들일 수 있습니다 (OP 함수는 그렇지 않습니다) – Cubbi

3

정말 간단합니다 : C 또는 C++의 매개 변수에 대해 배열 표기법을 사용하면 실제로 포인터를 전달하기 위해 컴파일러에서 자동으로 조정됩니다.

void revalue(int r, int *ar, int n) 

... 그리고 거기에서, 그것의 대부분은 아주 분명하다

IOW, 당신의 기능은 정말이다.

3

이 혼동은 int ar[]입니다.이 문맥에서는 int* ar을 쓰는 것과 같습니다. C++에서는 값으로 내장 배열을 전달할 수 없습니다. 그러나, 그들은 쉽게 포인터로 붕괴하고 위의 대체 표기법입니다. int ar[10] 또는 int ar[20]을 사용할 수 있었으므로 동일한 내용이었습니다.

관련 문제