2014-10-02 2 views
-3

배열 요소를 함수에 전달하고 있습니다. 이 함수는 배열의 각 요소에 5를 더합니다. 나는 또한 정수를 전달하고 그것에 5를 추가하고있다 ... 비록 그것은 'value by call'함수 일 뿐이지 만 (예상되는) main()에서 정수 dosn't의 값은 변하지 만 배열 요소는 변하지 않는다.값으로 호출하여 배열 요소 변경

나는 어떻게 그리고 왜 알 수 없습니까?

#include <iostream> 

using namespace std; 

void change(int x[],int y); 

int main() 
{ 
    int sharan[]={1,2,3,4}; 
    int a=10; 
    change(sharan,a); 
    for(int j=0;j<4;j++) 
    { 
     cout<<sharan[j]<<endl; 
    } 
    cout<<endl<<"a is : "<<a; 
    return(0); 
} 

void change(int x[],int y) 
{ 
    for(int i=0;i<4;i++) 
    { 
     x[i]+=5; 
    } 
    y+=5; 
} 
+0

변수 –

+0

의 값을 정수 a로 변경 한 후 y에 5를 추가하려면 포인터가 필요합니다. !!!!!!! –

+1

'change (sharan, a) '를 호출하면 a의 값의 사본이 만들어져 함수 내에서 사용됩니다. (이 함수는 괜찮 았지만 아무 영향을 미치지 않는 외부 'a'와는 아무런 관련이없는 복사본에 5를 할당합니다.)'void change (int x [], int & y) {...}'. 그러면 y는 a의 별칭이되고 y의 변경은 a의 변경과 같습니다. –

답변

5

배열

void change(int x[],int y)x+i

y=5; 내부 change 기본적으로 업데이트에서 x[i] += 5;

당신이 주소의 내용을 변경하고와 void change (int *x, int y)

에 해당 포인터에 붕괴 너는 그 주소 y의 칼 사본 따라서 changey의 실제 값에는 수정 array 이후

+0

thankx 많이 @POW –

1

는 항상 어떤 변화가 외부도 함수를 호출에 array에 영향을 미칠 것입니다 참조 유형 존재하지 않는, 통과되지 않았다.

코드에서 볼 수 있듯이 :

change(sharan,a); // here `sharan` points the base address an you are passing it. 
+0

@PaulR 주소가 – Rustam

+0

덕분에 @Rustam이 정말 도움이되었습니다 .... –

1

C++가 값으로 원시 배열을 전달하는 지원하지 않습니다. 이러한 함수를 전달하려고하면 배열에 대한 포인터로 변환됩니다. 이러한 이유로 배열의 요소를 수정하면 변경 내용이 호출 함수에 반영됩니다. 이 경우 main().