如何使用C +中的指针访问数组中的特定索引?

时间:2019-07-19 19:45:12

标签: c++ arrays pointers indexing

我有一个正在编写的程序,可以打印出最多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”来遍历数组。

2 个答案:

答案 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';