可能重复:
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 :(得分: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)
因为您没有存储返回值。代码不会以现在的形式编译。
将其命名为:
rArea = (rBase , rHeight);
将功能更改为:
int FindArea (int rBase ,int rHeight)
{
return (rBase * rHeight);
}
将原型更改为:
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;
}