为什么不返回修改函数的参数值

时间:2012-10-02 23:05:22

标签: c function

  

可能重复:
  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

7 个答案:

答案 0 :(得分:3)

您将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);

答案 1 :(得分:1)

因为您没有存储返回值。代码不会以现在的形式编译。

  1. 将其命名为:

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

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

    int FindArea(int , int);
    

答案 2 :(得分:1)

您需要将FindArea的返回值指定给rArea。目前,FindArea会将产品分配给同名的本地变量。

或者,您可以传递main的{​​{1}}地址来修改它,看起来像

rArea
<{1>}中的

FindArea(&rArea, rBase, rHeight);

答案 3 :(得分:1)

FindArea (rArea , rBase , rHeight);

并不像你认为的那样工作。在C中,参数按值传递;这意味着修改函数内的area仅修改它的本地副本。您需要将函数的返回值赋给变量:

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

int w, h, area;

// ...
area = findArea(w, h);

答案 4 :(得分:0)

那是因为你从未在主程序中为rArea分配另一个值而不是0。

答案 5 :(得分:0)

通过指针获取rArea

int FindArea(int *, int , int);

...

FindArea (&rArea , rBase , rHeight);

...



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

 return (*rArea);

}

答案 6 :(得分:0)

您的基本问题是您不了解如何从函数中获取值。将相关行更改为:

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

int area = FindArea(rBase, rHeight);

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