这就是我的代码的样子:
int main()
{
int a[] = {1,23,5,56,7,5};
int *p2 = a;
size = sizeof(a)/sizeof(a[0]);
int *p1 = new int[size];
cout << "sizeof " << size << endl;
int i = 0;
while(p2 != a+size )
{
*p1++ = *p2++;
}
cout << p1[1] << ' ' << p1[3];
return 0;
}
cout << p1[1] << ' ' << p1[3];
输出的值与[1]和[3]中的值不同。任何人都可以解释为什么会这样吗?
答案 0 :(得分:4)
您的while
循环会修改p1
。循环完成后,p1
将指向新数组的结尾(事实上,它将指向结束后的下一个位置)。要解决此问题,请保留原始p1
的副本。
int *p = p1;
while(p2 != a+size )
{
*p1++ = *p2++;
}
p1 = p;
cout << p1[1] << ' ' << p1[3];
答案 1 :(得分:3)
您需要将p1重置为初始数组的开头。
答案 2 :(得分:1)
在循环之后,p1
指向分配缓冲区的末尾,而不是在开始时,因为在每次迭代中它都会递增。
你应该尝试这样的事情:
int *p1 = new int[size];
int *begin = p1; //store the beginning of the array
while(p2 != a+size )
{
*p1++ = *p2++;
}
p1 = begin; //reset to the begin again
//now print!
cout << p1[1] << ' ' << p1[3];
答案 3 :(得分:1)
您应该在访问元素之前重置p1:
int main()
{
int a[] = {1,23,5,56,7,5};
int *p2 = a;
int size = sizeof(a)/sizeof(a[0]);
int *p1 = new int[size];
cout << "sizeof " << size << endl;
int i = 0;
while(p2 != a+size )
{
*p1++ = *p2++;
}
p1 -= size;
cout << p1[1] << ' ' << p1[3];
return 0;
}