我对这段代码感到困惑:
ipPtr = ipPtr + 3; // 5
cout << *ipPtr << endl;
为什么cout
不是5,而是一些随机大数?请有人向我解释。根据我的理解,我认为cout << *ipPtr << endl;
指向它上面的*ipPtr
。我对吗 ?
#include <iostream>
void main(){
using namespace std;
int iaArray[] = {1,2,3,4,5};
int* ipPtr = 0;
ipPtr = &(iaArray[1]);
cout << *ipPtr << endl;//2
++ipPtr;
cout << *ipPtr << endl;//3
ipPtr = ipPtr + 3; //not 5 but random number.
cout << *ipPtr << endl;
}
答案 0 :(得分:8)
因为您已经将指针递增超过数组的末尾。您似乎忘记了在向其添加3之前编写了++ipPtr
。
&(iaArray[1])
|
iaArray = { 1, 2, 3, 4, 5 } ?
| |
++ipPtr ipPtr + 3
答案 1 :(得分:0)
因为当你向指针添加3时它已经位于数组的第三个位置,所以它最后会在最后一个元素之后。
答案 2 :(得分:0)
ipPtr = &(iaArray[1]);
//指向第二个位置(第一个位置为0)
++ipPtr;
//指向第三个位置
//3 + 3 = 6
ipPtr = ipPtr + 3;
数组只有5个位置,所以它打印的内存位置不是5,位于第五位。