我正在自学C++,并针对指针编写了该程序:



所以我解决了这个问题,下面是我的代码。在我的while循环中,我有一条语句:while(ptr1 < miles + SIZE)。如果将此语句更改为while(ptr1 < ptr1 + SIZE)并运行它,则会出现分段错误。为什么?即使Miles是一个数组,但我知道它实际上是一个指针。如果执行cout << ptr1;cout << miles;,则输出将相同。有人可以解释一下吗?谢谢。

#include<iostream>
#include<iomanip>

using namespace std;

void prob4()
{
    int miles[] = {15, 22, 16, 18, 27, 23, 20};
    const int SIZE = sizeof(miles)/sizeof(miles[0]);

    int dist[SIZE] = {0};

    int *ptr1 = miles;
    int *ptr2 = dist;

    while(ptr1 < miles + SIZE)
    {
        *ptr2 = *ptr1;
        ptr2++;
        ptr1++;
    }

    for(int i=0; i < SIZE; i++)
        cout << setw(4) << dist[i];
    cout << endl;

    return;
}

int main()
{
    prob4();
    return 9;
}

最佳答案

数组不是指针。

指针指向事物。数组包含事物。

循环的一种安全方法是按项目计数,而不是按指针位置计数。

一个问题是结束指针值可能不在范围内或不存在。

分析-“ptr1
不要比较指向数组的指针,这很危险。
试试这个:“ptr1
分析-“ptr1
这是一个移动的目标,因为ptr1总是在变化。

关于c++ - 在C++中复制整数数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19919409/

10-09 07:24