-1

我是 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;
    }  
}
4

3 回答 3

3

函数的参数可以作为与该参数类型匹配或可以强制转换的任何表达式提供。

于 2012-10-30T21:10:03.020 回答
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(假的)。如果语句内的表达式的整体值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. 如果您打算让函数返回 an int,明智的做法是进行显式类型转换,例如:

int distance = (int)sqrt((distance_x * distance_x) + (distance_y * distance_y));

这将确保如果您或其他任何人稍后查看代码,他们不会认为该函数使用了错误的数据类型。

于 2012-10-31T00:23:27.843 回答
2

提示:如果你想使用 sqrt,你应该使用 double 而不是 int:

http://www.cplusplus.com/reference/clibrary/cmath/sqrt/

于 2012-10-30T21:31:26.020 回答