Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在函数参数中引用数组?_C++ - Fatal编程技术网

C++ 如何在函数参数中引用数组?

C++ 如何在函数参数中引用数组?,c++,C++,如果数据类型是typedef,如何通过引用传递数组。我正在学习C++,我通过引用读取了调用的概念,但是当我按照这个方法实现时,我得到了一个错误(粘贴在代码之后)。请问,谁能解释一下发送数组作为引用调用的最佳方式 #include <iostream> #include <vector> using namespace std; typedef unsigned long ulong; ulong fib_dynamic(ulong n, ulong &memo

如果数据类型是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;
}
#包括
#包括
使用名称空间std;
typedef无符号长ulong;
ulong fib_dynamic(ulong、ulong和备忘录[]){
如果(n<2)返回1;
如果(备注[n]==0){
memo[n]=fib_dynamic(n-1,memo)+fib_dynamic(n-2,memo);
}
返回备忘录[n];
}
ulong fib_迭代(ulong n){
乌龙纤维[n+1];
fib[0]=1;
fib[1]=1;
对于(int i=2;i n;
乌龙备忘录[n];

不能使用
std::vector
,因为在这种情况下,您需要一个动态大小的数组(即,数组的大小在运行时决定)。通过引用传递向量,注意不要越界

#include <iostream>
#include <vector>
using namespace std;

ulong fib_dynamic(ulong n, std::vector<unsigned long>& 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];
}

int main() {

    ulong n;
    cout << "Welcome to Fib Calculator\nEnter the n:";
    cin >> n;
    std::vector<unsigned long> memo(n + 1);

    cout << endl << n << " th fib num(dynamic) = " << fib_dynamic(n,memo)
         << endl;
}
#包括
#包括
使用名称空间std;
ulong fib_dynamic(ulong n,标准::向量和备忘录){
如果(n<2)返回1;
如果(备注[n]==0){
memo[n]=fib_dynamic(n-1,memo)+fib_dynamic(n-2,memo);
}
返回备忘录[n];
}
int main(){
乌隆;
cout>n;
标准::向量备忘录(n+1);

不能使用
std::vector
,因为在这种情况下,您需要一个动态大小的数组(即,数组的大小在运行时决定)。通过引用传递向量,注意不要越界

#include <iostream>
#include <vector>
using namespace std;

ulong fib_dynamic(ulong n, std::vector<unsigned long>& 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];
}

int main() {

    ulong n;
    cout << "Welcome to Fib Calculator\nEnter the n:";
    cin >> n;
    std::vector<unsigned long> memo(n + 1);

    cout << endl << n << " th fib num(dynamic) = " << fib_dynamic(n,memo)
         << endl;
}
#包括
#包括
使用名称空间std;
ulong fib_dynamic(ulong n,标准::向量和备忘录){
如果(n<2)返回1;
如果(备注[n]==0){
memo[n]=fib_dynamic(n-1,memo)+fib_dynamic(n-2,memo);
}
返回备忘录[n];
}
int main(){
乌隆;
cout>n;
标准::向量备忘录(n+1);

cout数组默认由指针传递。 读和读

代码-

#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;

typedef unsigned long ulong;


ulong fib_dynamic(ulong n, ulong (*memo)){
  if(n < 2) return 1;
  if(memo[n]!=0)return memo[n];
  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(ulong 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+1];
  memset(memo,0,sizeof memo);
  memo[0]=memo[1]=1;
  cout << endl << n << " th fib num(dynamic) = " << fib_dynamic(n,memo) << endl;
}
#包括
#包括
#包括
使用名称空间std;
typedef无符号长ulong;
ulong fib_dynamic(ulong n,ulong(*备忘录)){
如果(n<2)返回1;
如果(备注[n]!=0)返回备注[n];
如果(备注[n]==0){
memo[n]=fib_dynamic(n-1,memo)+fib_dynamic(n-2,memo);
}
返回备忘录[n];
}
ulong fib_迭代(ulong n){
乌龙纤维[n+1];
fib[0]=1;
fib[1]=1;
对于(ulong i=2;i n;
乌隆备忘录[n+1];
memset(memo,0,memo的大小);
备忘录[0]=备忘录[1]=1;

cout数组默认由指针传递。 读和读

代码-

#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;

typedef unsigned long ulong;


ulong fib_dynamic(ulong n, ulong (*memo)){
  if(n < 2) return 1;
  if(memo[n]!=0)return memo[n];
  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(ulong 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+1];
  memset(memo,0,sizeof memo);
  memo[0]=memo[1]=1;
  cout << endl << n << " th fib num(dynamic) = " << fib_dynamic(n,memo) << endl;
}
#包括
#包括
#包括
使用名称空间std;
typedef无符号长ulong;
ulong fib_dynamic(ulong n,ulong(*备忘录)){
如果(n<2)返回1;
如果(备注[n]!=0)返回备注[n];
如果(备注[n]==0){
memo[n]=fib_dynamic(n-1,memo)+fib_dynamic(n-2,memo);
}
返回备忘录[n];
}
ulong fib_迭代(ulong n){
乌龙纤维[n+1];
fib[0]=1;
fib[1]=1;
对于(ulong i=2;i n;
乌隆备忘录[n+1];
memset(memo,0,memo的大小);
备忘录[0]=备忘录[1]=1;

难道你觉得首先需要一个引用吗?让它成为
ulong memo[]
注意
ulong memo[n]
n
元素,通过
n-1
索引
0
寻址。因此
memo[n]
通过缓冲区溢出显示未定义的行为。
ulong&memo[]
是一个数组(指针)指向
ulong
s(
ulong&
)的引用。
ulong(&memo)[
是对
ulong
s数组的引用。为什么您觉得首先需要引用?将其设置为
ulong memo[]
请注意
ulong memo[n]
n
元素,通过
n-1
用索引
0
寻址。因此
memo[n]
通过缓冲区溢出显示未定义的行为。
ulong&memo[]
是指向
ulong
s(
ulong&
)的引用的数组(指针)。
ulong(&memo)[]
是对
ulong
s数组的引用。