2012-10-02 118 views
-3

可能重複:
How to modify content of the original variable which is passed by value?爲什麼不返回修改參數的值的函數

我建立一個非常簡單的程序,計算矩形的面積。很簡單,但你會注意到我似乎無法獲得返回值。我一直在看0.可能有一個明顯的答案,或者有些東西我只是不明白。繼承人我的代碼:

#include<stdio.h> 

//prototypes 
int FindArea(int , int , int); 

main() 
{ 

//Area of a Rectangle 

    int rBase,rHeight,rArea = 0; 

    //get base 
    printf("\n\n\tThis program will calculate the Area of a rectangle."); 
    printf("\n\n\tFirst, enter a value of the base of a rectangle:"); 
    scanf(" %d" , &rBase); 

    //refresh and get height 
    system("cls"); 
    printf("\n\n\tNow please enter the height of the same rectangle:"); 
    scanf(" %d" , &rHeight); 

    //refresh and show output 
    system("cls"); 
    FindArea (rArea , rBase , rHeight); 
    printf("\n\n\tThe area of this rectangle is %d" , rArea); 
    getch(); 

}//end main 

int FindArea (rArea , rBase , rHeight) 
{ 
rArea = (rBase * rHeight); 

return (rArea); 

}//end FindArea 
+0

分配'rArea = 0'在頂部,這就是爲什麼它總是返回0 – squiguy

+4

如果您還沒有一個關於這個頭緒,你還沒有仔細閱讀一個基本的C教程。 -1。 – 2012-10-02 23:12:13

+0

是的,我有。這個例子與我正在做的無關,使用(void)或換句話說沒有返回值。另一個使用的加法和我的教授不會講英語。我使用了一種不同的方法來宣稱變量,只是試驗一種比單獨初始化更快的方法。然而,這與問題無關,我感謝你的反饋,但侮辱我也與我做錯了什麼無關。這是我第一次嘗試創建一個功能,並明顯誤解了這個概念。 – Ev00

回答

3

您intialize rArea爲0。然後,你按價值將其傳遞到FindArea。這意味着函數中沒有任何rArea的變化被反映出來。你也不使用返回值。因此,rArea保持0。

選項1 - 使用返回值:

int FindArea(int rBase, int rHeight) { 
    return rBase * rHeight; 
} 

rArea = FindArea(rBase, rHeight); 

選擇2 - 按引用傳遞:

void FindArea(int *rArea, int rBase, int rHeight) { 
    *rArea = rBase * rHeight; 
} 

FindArea(&rArea, rBase, rHeight); 
+0

謝謝,我是小白。 – Ev00

0

這是因爲你永遠不會在你的主程序中分配另一個值不是0到rArea。

0

採取rArea通過指針:

int FindArea(int *, int , int); 

... 

FindArea (&rArea , rBase , rHeight); 

... 



int FindArea (int *rArea , int rBase , int rHeight) 
{ 
*rArea = (rBase * rHeight); 

return (*rArea); 

} 
1

因爲你不存儲返回值。代碼不會以其目前的形式進行編譯。

  1. 稱其爲:

    rArea = (rBase , rHeight); 
    
  2. 更改功能:

    int FindArea (int rBase ,int rHeight) 
    { 
        return (rBase * rHeight); 
    } 
    
  3. 更改原型:

    int FindArea(int , int); 
    
0

你的基本問題是你不明白如何從函數中獲取值。改變相關線路:

int FindArea(int rBase, int rHeight); // prototype 

int area = FindArea(rBase, rHeight); 

int FindArea(int rBase, int rHeight) 
{ 
    return rBase * rHeight; 
} 
1

您需要的FindArea的返回值賦給rArea。目前,FindArea將該產品分配給同名的局部變量。

或者,您也可以通過mainrArea的地址修改,那會是什麼樣子

FindArea(&rArea, rBase, rHeight); 

main

void FindArea(int * rArea, int rBase, int rHeight) { 
    *rArea = rBase * rHeight; 
} 
1
FindArea (rArea , rBase , rHeight); 

像你想象的那樣是行不通的。在C中,參數是按值傳遞的;這意味着在函數內修改area只會修改它的本地副本。您需要將函數的返回值賦給變量:

int FindArea(int w, int h) { return w * h; } 

int w, h, area; 

// ... 
area = findArea(w, h); 
相關問題