我是C ++的新手,并且不确定如何将参数传递给函数。
我正在使用函数Distance()
来计算两个节点之间的距离。
我声明了这样的函数:
int Distance(int x1, int y1, int x2 , int y2)
{
int distance_x = x1-x2;
int distance_y = y1- y2;
int distance = sqrt((distance_x * distance_x) + (distance_y * distance_y));
return distance;
}
在主内存中我有2个for
循环。
我需要知道的是,我是否可以传递这样的值:Distance (i, j, i+1, j+1)
。
for(int i = 0; i < No_Max; i++)
{
for(int j = 0; j < No_Max; j++)
{
if(Distance(i, j, i+1, j+1) <= Radio_Range) // the function
node_degree[i] = node_degree[i] + 1;
cout << node_degree[i] << endl;
}
}
答案 0 :(得分:3)
函数的参数可以作为任何与该参数的类型匹配的表达式提供,也可以强制转换为它。
答案 1 :(得分:2)
小贴士: 如果要使用sqrt:
,则应使用double而不是int答案 2 :(得分:2)
看起来您正在正确调用Distance(int, int, int, int)
功能。
以下语句将调用Distance()
:
Distance (i, j, i+1, j+1);
这会将Distance()
返回的值存储在变量中:
int dist = Distance (i, j, i+1, j+1);
这会将Distance()
(左操作数)返回的值与Radio_Range
(右操作数)进行比较。如果左操作数小于或等于右操作数,则将其计算为1
(true)。否则它将是0
(false)。如果if
语句中表达式的总值不为零,则紧跟if
语句之后的语句或块将被执行:
if(Distance(i, j, i+1, j+1) <= Radio_Range)
//Statement;
或:
if(Distance(i, j, i+1, j+1) <= Radio_Range){
//Statement;
//Statement;
//...
}
但是,Distance()
返回的值将被截断为整数。因此,除非distance
是完美的正方形,否则(distance_x * distance_x) + (distance_y * distance_y)
将不等于实际距离。为了获得更好的精度,请考虑使用double
。如果您打算让函数返回int
,那么进行显式类型转换是明智的,例如:
int distance = (int)sqrt((distance_x * distance_x) + (distance_y * distance_y));
这将确保如果您或其他任何人稍后查看代码,他们将不会认为该函数使用了错误的数据类型。