2013-09-30 81 views
0

這是一個簡單的測試程序,我試圖獲取函數func函數來修改變量a和b,然後在主函數中使用它們。有沒有辦法獲得func返回修改後的變量,以便可以使用? (最好不使用結構,因爲我不知道它是如何工作)獲取子函數來修改變量

#include <stdio.h> 

void func(int a, int b) 
{ 
    a=a+1; 
    b=b+1; 
} 

void main(void) 
{ 
    int a=0, b=0; 
    while (1) 
    { 
     func(a,b); 
     printf("%d\n",a); 
    } 
} 
+0

您需要[指針](http://en.wikipedia.org/wiki/Pointer_(computer_programming))。 –

回答

2

如果你想修改調用函數的變量,你要他們的地址傳遞給func(即一個指針傳遞給這些變量

void func(int* a, int* b) 
{ 
    *a=*a+1; 
    *b=*b+1; 
} 

func(&a,&b); 

你的代碼按值傳遞它的參數,這意味着ab被複制到被初始化與調用變量的值,但只存在的func期間新的變量。

+0

+1請擴大答案,解釋OP的代碼有變量的本地副本 –

+0

@IvayloStrandjev好點,我已經更新了我的答案 – simonc

0

我同意。最好的方法是使用pointers。但是你知道你的代碼永遠不會終止嗎?你應該使用可以結束while循環的條件。

另外,如果你想perfom完全相同的動作這兩個變量,你可以只使用return語句是這樣的:

#include <stdio.h> 
void func(int a, int b) 
{ 
    return a+1; 
} 

void main(void) 
{ 
    int a=0, b=0; 

    while (a < 5) 
    { 
     func(a); 
     func(b); 
     printf("%d\n",a); 
    } 
} 
0

我們可以通過指針實現。不要使用While(1),因爲它會進入無限循環。我認爲以下程序對你有幫助。

#include <stdio.h> 

    void func(int* a, int* b) 
    { 
    *a=*a+1; 
    *b=*b+1; 
    } 

    void main(void) 
    { 
    int a=0, b=0; 
    //while (1) 
    // { 
     func(&a,&b); 
     printf("%d\n",a); 
     // } 
    }