2016-10-20 93 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

在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

你的函數的問題是,該值是按值傳遞,而不是引用,因此交換做得好,但在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; 
} 

你也可以把這兩個值轉換爲結構,並用它來傳遞他們進出的樂趣。