簡體   English   中英

需要幫助來理解傳遞參數給函數

[英]Need help understanding passing arguments to function

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

函數的參數可以作為與該參數的類型匹配的任何表達式提供,也可以強制轉換為該參數。

提示:如果要使用sqrt,則應使用double而不是int:

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

似乎您正在正確調用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_x * distance_x) + (distance_y * distance_y)是一個完美的平方,否則distance將不等於實際距離。 為了獲得更高的精度,請考慮使用double 如果打算讓該函數返回int ,則進行顯式類型轉換是明智的,例如:

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

這樣可以確保,如果您或其他任何人以后再看代碼,他們將不會認為該函數使用了錯誤的數據類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM