请各位大神们帮我理解下这段话,来自《C++ primer》
The value stored in a pointer can be in one of four states:
1. It can point to an object;
2. It can point to the location just immediately past the end of an object;
3. It can be a null pointer,indicating that it is not bound to any object;
4. It can be invalid; values other than the preceding three are invalid.
重点讲解第2点和第4点,3Q~ c++ pointer 指针 primer object
[解决办法]
第二点应该是刚刚越过某一对象的下一地址,估计类似于迭代器里的end()返回的值吧
第四点看上去怪怪的,猜测有两种解释,一个就是类似于第二点,指向某一对象尾地址后紧接的地址(这个地址和指针的定义肯定一般不符,是invalid的);另一个会不会是指new和delete操作符,当delet一个指针p之后,删除了p所指向的动态对象,但是指针内存储的地址依然存在,所以这时候该地址的值就是invalid的
[解决办法]
第二点感觉是说悬垂指针呢
[解决办法]
先去看下中文版是怎么说的。
[解决办法]
个人理解
1. 指向一个对象, 这是最通常的用法
2. 第二种意思是指向容器中最后一个元素的下一个位置,这在STL 容器的 iteration 是最常见的,例如:
vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(2);
那么 vecInt.end() 就是最后一个元素 2 的下一个位置,这样设计可以非常方便的判断是否遍历完所有的元素,例如:
for(vector<int>::iterator iter = vecInt.begin(); iter != vecInt.end(); ++iter)
{
...
}
3. NULL 就不说啦
4. 第四种是指野指针,当使用 new 分配一块内存并付给一个指针的时候,如果 delete 之后并没有将该指针指向NULL,则该指针是野指针,使用野指针会引发不确定的行为。
[解决办法]
我觉得四楼有道理!