Fibonacci C++ - 从“int”到“int*”的无效转换以及“int fibo(int, int*, int*)”的初始化参数 2/3

Fibonacci C++ - invalid conversion from ‘int’ to ‘int*’ and initializing argument 2/3 of ‘int fibo(int, int*, int*)’

你好,我在斐波那契上用 C++ 编写的这个程序有问题,我试图搜索 google 错误,但我没有找到 solution/explanation。

有代码:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
using namespace std;

int fibo(int,int*,int*);
int conta=0;

int main() {
    int n,m,f;
    int fibN=1;
    int fibNMeno1=0;
    cout << "Calcolo del numero di Fibonacci di indice n \n \n" << endl;
    cout << "Introdurre n (positivo e minore di 47:" << endl;
    cin >> n;
    n=abs(n/1);

    if (n<1) {
        fibN=0;
    }
    else {
        fibo(n,fibN,fibNMeno1);
    }

    cout << "\n Fibonacci di indice " << n << "vale: " << fibN << endl;
    cout << "\n numero di chiamate ricorsive: " << conta << "\n\n" << endl;
}

int fibo(int n, int*pfn, int* pfnMeno1) {
    int t;
    int tFn,tFnMeno1,tF;
    conta++;
    if (n==1) {
        *pfn=1; *pfnMeno1=0; return 1;
    }
    else {
        t=n%2; n=n/2;
        fibo(n,pfn,pfnMeno1);
        tFn=(*pfn)*(*pfn)+2*(*pfn)*(*pfnMeno1);
        tFnMeno1=(*pfn)*(*pfn) + (*pfnMeno1)*(*pfnMeno1);
        if(t) {
            tF=tFn;
            tFn=tFn + tFnMeno1;
            tFnMeno1=tF;
        }
        *pfn=tFn;
        *pfnMeno1=tFnMeno1;
        return 3;
    }

}

哪里出错了?它如何在 C++ 上使用 *?

fibonacci.cpp: In function ‘int main()’:
    fibonacci.cpp:23:22: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
     fibo(n,fibN,fibNMeno1);
                          ^
    fibonacci.cpp:7:5: note:   initializing argument 2 of ‘int fibo(int, int*, int*)’
     int fibo(int,int*,int*);
         ^
    fibonacci.cpp:23:22: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
     fibo(n,fibN,fibNMeno1);
                          ^
    fibonacci.cpp:7:5: note:   initializing argument 3 of ‘int fibo(int, int*, int*)’
     int fibo(int,int*,int*);

fibN/fibNMeno1 具有 int 类型,但您的函数要求。 int * 类型,它是一个指向 int 的指针。

如果您想将 int 作为 int * 传递,您需要获取局部变量的地址(& 符号),如下所示:

fibo(n,&fibN,&fibNMeno1);

因为您可能想要 fibo(n,&fibN,&fibNMeno1) 而不是 fibo(n,fibN,fibNMeno1)...

您的 fibo 函数接受一个 int 和两个指针。你用三个整数打电话。因此编译器无法进行隐式转换。