C-Fibonacci序列在阵列分割中的应用

C-Fibonacci序列在阵列分割中的应用,c,fibonacci,C,Fibonacci,我想填充一个数组,最多n位斐波那契序列。以下是我目前掌握的情况: void fib(int **seq, int n){ seq = malloc(sizeof(int)*n); if(n==1){ *seq[0] = 0; } if(n==2){ *seq[0] = 0; *seq[1] = 1; } if(n>=3){ *seq[0] = 0; *seq

我想填充一个数组,最多n位斐波那契序列。以下是我目前掌握的情况:

void fib(int **seq, int n){
    seq = malloc(sizeof(int)*n);

    if(n==1){
        *seq[0] = 0;
    }

    if(n==2){
        *seq[0] = 0;
        *seq[1] = 1;
    }

    if(n>=3){
        *seq[0] = 0;
        *seq[1] = 1;
        *seq[2] = 1;
        for(int i=3; i<n; i++){
            *seq[i] = *seq[i-1]+*seq[i-2];
        }

    }
}
void fib(整数**seq,整数n){
seq=malloc(sizeof(int)*n);
如果(n==1){
*seq[0]=0;
}
如果(n==2){
*seq[0]=0;
*seq[1]=1;
}
如果(n>=3){
*seq[0]=0;
*seq[1]=1;
*seq[2]=1;

对于(int i=3;i,除以下错误外,您的程序在大多数部分都是正确的:

(1) 修理

seq=malloc(sizeof(int)*n);

*seq=malloc(sizeof(int)*n);

请注意,不应将内存分配给双指针。应将内存分配给“seq”所指的指针

(2) 替换所有语句,如

*seq[i]…

(*seq)[i]

请注意,[]的关联性比*.seq强,因此在所有实例上都需要用括号括住*seq

(3) 您尚未演示如何调用此函数,但我假设您在调用该函数之前正在为双指针分配内存

这里有一个工作程序供您参考:

#include <stdio.h>

void fib(int **seq, int n);

int main()
{
    int ** sequence = malloc(sizeof(int*));       

    fib(sequence, 5);
    for(int x = 0; x < 5; x++)
       printf("%d", (*sequence)[x]);
    return 0;
}

void fib(int **seq, int n){
    *seq = malloc(sizeof(int)*n);

    if(n==1){
        (*seq)[0] = 0;
    }

    if(n==2){
        (*seq)[0] = 0;
        (*seq)[1] = 1;
    }

    if(n>=3){
        (*seq)[0] = 0;
        (*seq)[1] = 1;
        (*seq)[2] = 1;
        for(int i=3; i<n; i++){
            (*seq)[i] = (*seq)[i-1]+(*seq)[i-2];
        }

    }
}
#包括
无效fib(整数**序号,整数n);
int main()
{
int**sequence=malloc(sizeof(int*));
fib(序列5);
对于(int x=0;x<5;x++)
printf(“%d”,(*序列)[x]);
返回0;
}
无效fib(整数**序号,整数n){
*seq=malloc(sizeof(int)*n);
如果(n==1){
(*序号)[0]=0;
}
如果(n==2){
(*序号)[0]=0;
(*序号)[1]=1;
}
如果(n>=3){
(*序号)[0]=0;
(*序号)[1]=1;
(*序号)[2]=1;

对于(int i=3;i您正在传递指针的
指针,即
void fib(int**seq,int n)
然后尝试分配内存
seq=malloc(sizeof(int)*n);
哪个错误

不要这样做,你可以简单地做

void fib(int *seq, int n){



if(n==1){

    seq[0] = 0;
}

if(n==2){
    seq[0] = 0;
    seq[1] = 1;
}

if(n>=3){
    seq[0] = 0;
    seq[1] = 1;
    seq[2] = 1;
    for(int i=3; i<n; i++){

        seq[i] = seq[i-1]+seq[i-2];
    }

}
}
int main()
{

int n=10;
int *arr=(int*)malloc(sizeof(int)*(n)); // Allocate memory here 
fib(arr,10);
for(int i=0;i<10;i++)
    cout<<arr[i]<<" ";


return 0;
}
void fib(int*seq,int n){
如果(n==1){
seq[0]=0;
}
如果(n==2){
seq[0]=0;
seq[1]=1;
}
如果(n>=3){
seq[0]=0;
seq[1]=1;
seq[2]=1;

对于(int i=3;i,您必须理解这一点: 对于阵列:-

a[i] = *(a+i) // correct
所以


你知道如何使用调试器吗?很可能,
seq=malloc(sizeof(int)*n);
-->
*seq=malloc(sizeof(int)*n);
*seq[0]=0;
(*seq)[0]=0;
(*seq)[1]=1;
)什么是
seq[0]
等等。这些都是指向内存的指针。它们是否已初始化?否。你能安全地取消引用它们吗?不,我对C和命令行比较陌生。你肯定应该学习如何使用调试器。此外,GUI调试器对于新手来说要容易得多-对于beginn来说,命令行调试器通常更难使用ers.检查我的答案,我希望你会发现这很有用。我想从main调用函数:
int*fib_sequence;fib(&fib_sequence,5);
当然。在这种情况下,你仍然需要为fib_sequence分配内存,比如
int*fib_sequence=malloc(sizeof(int)*5)
。然后在函数调用后读取值时,可以对(int x=0;x<5;x++)printf(“%d”,fib_序列[x])执行
*a[i] = **(a+i) //pointer to pointer so it will not work in your case