2016-10-20 5 views
2

C에서 두 변수의 값을 바꿔 넣으려고합니다.하지만 함수를 작성했지만 작동하지 않으며 잘못된 점이 있습니다.변수의 두 값을 바꿔

#include <stdio.h> 

void fun(int a_local, int b_local) 
{ 
    int temp = a_local; 
    a_local = b_local; 
    b_local = temp; 
} 

int main() 
{ 
    int a_global = 5; 
    int b_global = 7; 

    printf("a=%d, b=%d\n", a_global, b_global); 
    fun(a_global, b_global); 
    printf("a=%d, b=%d\n", a_global, b_global); 

    return 0; 
} 
+0

코드는 두 개의 변수를 교환했습니다 :'a_local'과'b_local'은 그들이 시작한 것과 반대의 가치를 가지고 있습니다. 하지만 그 스왑은 부모에게 영향을주지 않습니다 :'a_global, b_global'. – chux

답변

0

이 함수는 인수를 전달하는 경우 대신은 "참조에 의해 전달"모든 "변경"이 함수 호출 후 보일 것이다 앰퍼샌드를 사용할 수 있습니다 무효 아무것도 반환하지 않습니다.

#include <stdio.h> 

void fun(int* a_local, int* b_local) 
{ 
    int temp=*a_local; 
    *a_local=*b_local; 
    *b_local=temp; 
} 
int main() 
{ 
    int a_global=5; 
    int b_global=7; 

    printf("a=%d, b=%d\n", a_global, b_global); 
    fun(&a_global,&b_global); 
    printf("a=%d, b=%d\n", a_global, b_global); 

return 0; 
} 
2

모든 기능 매개 변수는 값으로 전달됩니다. 따라서 함수 내부의 매개 변수에 대한 변경 사항은 호출 함수에서 볼 수 없습니다.

변경할 변수마다 포인터 을 허용하도록 함수를 변경해야합니다. 그런 다음 주소을 전달합니다. 그런 다음 함수에서 포인터를 역 참조하여 호출 함수의 변수를 변경합니다.

#include <stdio.h> 

void fun(int *a_local, int *b_local) 
{ 
    int temp = *a_local; 
    *a_local = *b_local; 
    *b_local = temp; 
} 

int main() 
{ 
    int a_global = 5; 
    int b_global = 7; 

    printf("a=%d, b=%d\n", a_global, b_global); 
    fun(&a_global, &b_global); 
    printf("a=%d, b=%d\n", a_global, b_global); 

    return 0; 
} 
0

당신의 기능에 대한 문제는 값이 참조 따라서 스왑 제대로 수행하지, 값에 의해 전달되고 있지만 (내부 변수 모두에 로컬 함수에서 반환 할 때 RAM 손실되고 있다는 점이다 함수 및 종료시 파괴)

여기에 하나의 해결책입니다 : 포인터를 사용합니다.

void fun(int* a_local, int* b_local) 
{ 
    int temp=*a_local; 
    *a_local=*b_local; 
    *b_local=temp; 
} 
0

당신은 그렇지 않으면 자신의 로컬 복사본은 당신이 함수에서 돌아 왔을 때, 파괴 떠나 다음 함수를 호출 할 때, 이러한 로컬 복사본의 값이 바뀌 었는지 작성 얻을, 스와핑 기능에 대한 포인터로 변수를 전달해야 원래 변수는 변경되지 않았습니다.

void fun(int* a_local, int* b_local) 
{ 
    int temp=*a_local; 
    *a_local=*b_local; 
    *b_local=temp; 
} 
int main() 
{ 
    int a_global=5; 
    int b_global=7; 

    printf("a=%d, b=%d\n", a_global, b_global); 
    fun(&a_global,&b_global); 
    printf("a=%d, b=%d\n", a_global, b_global); 

return 0; 
} 
0

는 당신이 "재미"함수에서 값을 반환해야합니다 당신의 방법을 수행하거나 실제로 주요 변경되지 않습니다. ..이이 예와 같이, 함수에서 그것을 할 수 없었다 주위

int main() 
{ 
    int a_global=5; 
    int b_global=7; 

    printf("a=%d, b=%d\n", a_global, b_global); 
    int temp=a_local; 
    a_local=b_local; 
    b_local=temp; 
    printf("a=%d, b=%d\n", a_global, b_global); 

return 0; 
} 

를 얻으려면 당신은 또한 구조체에 두 개의 값을 넣어에서 재미 그들을 전달하는 것을 사용할 수 있습니다.