2012-04-01 1 views
1

사이에 교환하는 ++어떻게 배열 및 포인터 C++ 나 C에서 배열과 포인터 사이에 교환하는 것을 시도하고있다

내 코드는 다음과 같습니다

void foo(int* a, int* b); 
void main() 
{ 
    int *a = NULL; 
    int b[6]={2,3,5,6}; 
    foo(a,b); 
} 

void foo(int* a, int b[]) 
{ 
    int * c; 
    c=a; 
    a=b; 
    b=c; 
} 

내가 변경 한 방법 아무것도으로부터 반환하지만,

메서드 내에서 모든 것이 작동하지만 메서드가 아무 것도 반환하지 않을 때.

내 질문은 :

) 내 실수는 무엇입니까? B) 어떻게 수정해야합니까?

+6

이 당신의 책이나 교수가 가르치는 경우'무효 메인()', 그것은 *이 *을 교환하는 시간이다. –

답변

7

실수로 배열이 포인터라고 가정합니다. 그들은 그렇지 않습니다. 그들은 쇠퇴 할 수 있습니다.

당신은 b을 변경할 수 없습니다,하지만 당신은 참조를 전달하여, a을 변경할 수 있습니다

void foo(int*& a, int b[]) 
{ 
    int * c; 
    c=a; 
    a=b; 
} 
0

당신의 예에서, b이 할당됩니다. 그러나 배열의이 "할당 된"속성을 포인터로 전송할 수는 없습니다. malloc 또는 new을 사용하여 포인터를 할당 할 수 있지만 배열의 할당을 해제 할 수는 없습니다. 그래서 네가하고 싶은 일은 불가능 해. 당신이 ab의 내용을 교환 할 일은 원하는 모든, 당신은 하드 방법 (물리적으로 한 번에 전체 어레이에 대한 각 값을 복사하거나 memcpy) 그렇게해야하지만거야 경우

당신은 할 수 없습니다 주소가 a으로 변경되는 방식으로 배열을 변경하면됩니다.

(필수 비고 :. 당신이 당신의 질문 c++ 태그 있기 때문에, 당신은 벡터를 사용한다)