Dan*_*Dan 0 c++ arrays pointers
作为c ++的初学者,我很难理解指针和数组.我写了以下程序:
int main (void){
int p[3]={0};
int * iptr = new int [4];
iptr++;
*iptr=2;
iptr++;
*iptr=3;
for (int i=0;i<4;i++){
cout << "iptr: " << *iptr << endl;
iptr++;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是我没有得到预期的结果.我希望元素[1]和[2]分别具有值2和3.但是我得到了一个结果:
iptr: 3
iptr: -842150451
iptr: -33686019
iptr: 0
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我,我的理解在哪里出错了吗?
谢谢丹
作为c ++的初学者,我很难理解指针和数组
任何人都可以给你的最佳建议:不要.指针和数组是不值得的.使用像std::vector或的C++工具std::array,你的生活将变得无比轻松.如果你需要的话,在掌握了其余的语言后,回来学习它们.
问题出在这里:
int * iptr = new int [4];
iptr++;
*iptr=2;
iptr++;
*iptr=3;
Run Code Online (Sandbox Code Playgroud)
在你打电话之后iptr++,iptr将不再指向数组的开头.设置值后,应重置iptr为原始位置(iptr -= 2)或使用辅助指针.
2个可能的解决方案:
iptr++;
*iptr=2;
iptr++;
*iptr=3;
iptr -= 2;
for (int i=0;i<4;i++){
cout << "iptr: " << *iptr << endl;
iptr++;
}
Run Code Online (Sandbox Code Playgroud)
或(清洁):
int* aux = iptr;
aux++;
*aux=2;
aux++;
*aux=3;
for (int i=0;i<4;i++){
cout << "iptr: " << *iptr << endl;
iptr++;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |