データ型がtypedefの場合、配列を参照渡しで渡す方法。私はC + +を学んでいますが、私はコール・バイ・リファレンスの概念を読んでいますが、それに基づいて実装すると、エラーが発生します(コードの後ろに貼り付けます)。してください、誰も参照として呼び出しとして機能する配列を送信する最良の方法を説明することができますか?関数のパラメータで配列を参照する方法は?
#include <iostream>
#include <vector>
using namespace std;
typedef unsigned long ulong;
ulong fib_dynamic(ulong n, ulong &memo[]){
if(n < 2) return 1;
if(memo[n] == 0){
memo[n] = fib_dynamic(n-1, memo) + fib_dynamic(n-2, memo);
}
return memo[n];
}
ulong fib_iterative(ulong n){
ulong fib[n+1];
fib[0] = 1;
fib[1] = 1;
for(int i=2; i<n; i++) {
fib[i] = fib[i-1] + fib[i-2];
}
return fib[n-1];
}
int main(){
ulong n;
cout << "Welcome to Fib Calculator\nEnter the n:";
cin >> n;
ulong memo[n];
cout << endl << n << " th fib num(dynamic) = " << fib_dynamic(n,memo) << endl;
}
//エラー
1-fib-dp.cpp:13:47: error: 'memo' declared as array of references of type
'unsigned long &'
ulong fib_dynamic(ulong n, unsigned long &memo[]){
^
1-fib-dp.cpp:37:53: error: no matching function for call to 'fib_dynamic'
cout << endl << n << " th fib num(dynamic) = " << fib_dynamic(n,memo) << endl;
^~~~~~~~~~~
1-fib-dp.cpp:13:7: note: candidate function not viable: no known conversion from
'ulong [n]' to 'int' for 2nd argument
ulong fib_dynamic(ulong n, unsigned long &memo[]){
^
2 errors generated.
なぜ最初に参照が必要だと思いますか?それを 'ulong memo []'にしてください。 –
'ulong memo [n]'には 'n'要素があり、' 0'から 'n-1'までのインデックスで扱われます。したがって、 'memo [n]'はバッファオーバーランによって未定義の動作を示します。 –
'ulong&memo []'は 'ulong's(' ulong& ')の参照配列(ポインタ)です。 'ulong(&memo)[]'は 'ulong'の配列への参照です。 –