我正在自学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/