访问new创建的数组为什么总是出现错误,不太理解,int *new_p = p;这一行不就是地址的复制吗?没必要写感觉是一样的啊?为什么在for循环内能够输出正确的值,换到循环外用for循环就访问的值是错误的?
第一次 int *new_p = p;复制的值,和 *new_p = *iter;语句运行之后的地址会有不同,这是为什么?不是用 * 将new_p解引用然后同样的道理讲iter对应的值放入new_p的地址内吗?
求各位解答一二,初学指针。
#include<iostream>
//编写程序由从标准输入设备读取的元素数据建立一个int型的vector对象,
//然后创建一个与该vector对象大小一致的数组,把vector对象的虽有元素赋值给新数组
#include<vector>
using namespace std;
int main(){
vector<int> container;
int value;//数组需要一开始就确定长度,哪怕元素都为零
string result;
cout << "ctrl +z 放于行首代表输入完成(终止)" << endl;
while(cin >> value){
//输入的值放入缓冲区,一次读取一个数据,第二次循环直接读取第一次输入尚未放入容器的值
container.push_back(value);
}
int *p = new int[container.size()];//动态建立一个数组,*p指向数组首个元素
int *new_p = p;
int i = 0;
cout << "container容量为:" << container.size() << endl;
for (vector<int>::iterator iter=container.begin(); iter != container.end(); ++iter,++new_p) {
if (i < container.size())
{
*new_p = *iter;
i++;
cout << *new_p<< endl;
}
//cout << p << endl;
}
for (int j = 0; j < container.size(); j++) {
cout << new_p[j] <<" ";
}
cout << endl;
delete [] p;
system("pause");
return 0;
}
尝试过在 27行if循环后用 cout << new_p[i]<< endl;去验证,发现