我有一个正在编写的程序,可以打印出最多30个数字的斐波那契数列。我必须通过使用指针遍历数组来做到这一点,但是我不知道该怎么做。
我不了解很多容易理解的信息。
当我看到c ++代码的答案时,我所看到的就是这个...
我是菜鸟,当我不得不看代码时,我很难看所有'std ::'约定。我知道这可能是个好习惯,但是我还不满意。因此,我想举一个简单的示例,假设我在项目中使用了using namespace std;
行代码。
我尝试使用指针变量设置for..loop,但是我不确定如何执行此操作。
void fibonacciSequence(){
//initialize the array and users input
const int ARRAY_SIZE = 30;
int numbers[ARRAY_SIZE];
int *pointer;
pointer = numbers;
//Traverse the array and generate the Fibonacci Sequence
for(int i = 0; i < ARRAY_SIZE; i++){
//Set first element to 0
if(i == 0){
numbers[i] = 0;
}
//Set second element to 1
else if (i == 1){
numbers[i] = 1;
}
//Start calculating the sequence after the first 2 elements
//have been established.
else{
numbers[i] = numbers[(i - 1)] + numbers[(i - 2)];
}
}
// Output the Fibonacci Sequence after calculations.
for(int i = 0; i < ARRAY_SIZE; i++){
cout << numbers[i] << endl;
}
}
我拥有的这段代码非常完美。但是,我需要使用“指针”来代替在for ...循环中使用“ i”来遍历数组。
答案 0 :(得分:2)
这实际上是非常简单的更改
for(int i = 0; i < ARRAY_SIZE; i++){
cout << numbers[i] << endl;
}
对此
for(int* p = numbers; p < numbers + ARRAY_SIZE; p++){
cout << *p << endl;
}
说明
int* p = numbers
-将p设置为指向数组的开头
p < numbers + ARRAY_SIZE
-检查p尚未到达数组末尾
p++
-将p移到数组的下一个元素
*p
-访问p指向的元素
对您的第一个循环进行类似的更改。
整个主题是指针算术,也许您可以做一些研究。
答案 1 :(得分:1)
这可能不是学习指针的好项目,因为索引是计算纤维球菌序列的最自然的方法。但是这里。将此生成器循环替换为:
int *current = numbers;
*current++ = 0;
*current++ = 1;
while (current != numbers + ARRAY_SIZE) {
*current = *(current - 1) + *(current - 2);
++current;
}
然后输出:
for (current = numbers; current != numbers + ARRAY_SIZE; ++current)
std::cout << *current << '\n';