我正在做一个编程练习,我必须使用循环(非递归)来实现斐波那契数列。
虽然它无论如何都不完美,但我遇到的主要问题是我的算法。
由于变量 intBuffer 被分配了一个指针,因此在将其分配给内存位置 intArray[0 之前,它会随着
。intArray[1]
的值变化而变化,而不是保留以前的值]
我尝试使用 *
前缀来获取数据值而不是内存位置,但这产生了错误:
error: invalid type argument of unary '*' (have 'int')
代码如下:
#include <stdio.h>
int main(void)
{
int intArray[1];
int intRounds, intIndex, intBuffer;
printf("How many iterations would you like me to calculate? \n");
scanf("%d", &intRounds);
intArray[1] = 1;
intArray[0] = 0;
for (intIndex = 0; intIndex <= (intRounds - 1); intIndex++)
{
intBuffer = intArray[1];
intArray[1] = intArray[1] + intArray[0];
intArray[0] = intBuffer;
printf("Iteration %d: %d \n", (intIndex + 1), intArray[1]);
}
return 0;
}
最佳答案
您的代码表现出未定义的行为,因为您将 intArray
定义为只有一个元素,然后您尝试通过
intArray[1] = 1;
C
对数组使用基于 0 的索引,因此对于单元素数组,索引 1
是超出分配内存的访问,并将调用 undefined behaviour .
也就是说,就逻辑而言,在 for
循环内,您不断地覆盖 intArray[i]
处的值。
你应该
关于c - 分配期间从数组位置获取错误的数据值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921803/