数组和指针

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)

有人可以告诉我,我的理解在哪里出错了吗?

谢谢丹

Pup*_*ppy 6

作为c ++的初学者,我很难理解指针和数组

任何人都可以给你的最佳建议:不要.指针和数组是不值得的.使用像std::vector或的C++工具std::array,你的生活将变得无比轻松.如果你需要的话,在掌握了其余的语言后,回来学习它们.


Luc*_*ore 5

问题出在这里:

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)