我是 C 新手,在將陣列傳遞給函式時遇到了一些困難。
我想創建一個 Tableau 型別的陣列(它在 4 時自動初始化)并將該陣列傳遞給另一個函式,因此將 distanceReste 傳遞給 calculReste。
我希望能夠更改另一個函式內的陣列,例如,我想添加 1,2 和 3 并在我離開該函式后進行更改。
所以在我的代碼中,我會創建陣列,將它發送到 calculReste,將 calculReste 的結果放在 reste 并保留我對陣列 distanceReste 所做的更改,以便我可以在函式 calculDepartReste 中使用它(我沒有把它在代碼中)。
這是我的代碼:
Tableau<double> distanceReste[3];
Tableau<double> reste = calculReste(distanceReste);
Tableau<unsigned int> result = calculDepartReste(depart,distanceReste,reste);
return result;
Tableau<double> Carte::calculReste (Tableau<double> *distanceReste[]) const {
double max = std::numeric_limits<double>::max();
Tableau<double> chemin;
int position = 0;
for(int i=0;i<3;i ) {
for (int j = 0; j < 3; j ) {
for (int k = 0; k < 3; k ) {
...
}
}
}
*distanceReste[i] = max;
max = std::numeric_limits<double>::max();
position = 3;
}
return chemin;
}
我把它放得更輕,以便更好地閱讀。
如果您能幫助我,我將不勝感激。
非常感謝
編輯***
在看到你們給我的答案后,我嘗試了以下方法,但它仍然給我一個錯誤:

這是函式:

他是我在標題中的函式宣告:

仍然無法作業,我不明白為什么?
uj5u.com熱心網友回復:
您不必通過指標傳遞陣列,因為其中的陣列默認采用第一個元素的地址。因此請嘗試不帶 * 的形式引數。
uj5u.com熱心網友回復:
您可以使用函式模板通過參考傳遞陣列,如下所示:
#include <iostream>
template<std::size_t N>
void func(int (&arr)[N])
{
std::cout<<"size of array is: "<<N<<std::endl;
std::cout<<"its elements are: "<<std::endl;
for(int elem: arr)
{
std::cout<<elem<<std::endl;
}
}
int main()
{
int arrayToBePassed[4] = {1,45,23,54};
func(arrayToBePassed);
return 0;
}
因此,您有2 個選項可以解決您的問題:
解決方案1
使您的calculReste函式成為 成員函式模板。
解決方案2
將陣列直接傳遞給參考而不是指標,如下所示:
//note distanceReste is a reference to any array of fixed size
Tableau<double> Carte::calculReste (Tableau<double> (&distanceReste)[4]) const {
double max = std::numeric_limits<double>::max();
Tableau<double> chemin;
int position = 0;
for(int i=0;i<3;i ) {
for (int j = 0; j < 3; j ) {
for (int k = 0; k < 3; k ) {
...
}
}
}
*distanceReste[i] = max;
max = std::numeric_limits<double>::max();
position = 3;
}
return chemin;
}
calculReste類內的宣告也將更改為(如果您選擇解決方案2):
Tableau<double> calculReste (Tableau<double> (&distanceReste)[4]) const;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/321542.html
