回到指针的开头?

时间:2011-03-14 04:47:23

标签: c++ pointers

我知道您可以使用指针,例如:

someFunction(const char* &txt)
{
    txt++; //Increment the pointer
    txt--; //Decrement the pointer
}

如何回到指针的开头? (不计算我的增量数量并减少该数量)我在考虑类似的事情:

txt = &(*txt[0]);

但这似乎不起作用(将指针指定给它的起始位置)。

非常感谢任何帮助

布雷特

4 个答案:

答案 0 :(得分:9)

你做不到。你必须要保存原来的位置:

const char *o = txt;
// do work
txt = o;

或使用索引:

size_t i = 0;
// instead of txt++ it's i++
// and instead of *txt it's txt[i]
i = 0;

您的尝试:

txt = &(*txt[0]);

不正确,如果你看一下。首先,它需要txt[0](类型为char),然后尝试使用*取消引用它,然后使用&运算符获取该地址(理论上产生原始结果,虽然我不想过于考虑这是否适用于解除引用算术类型如char),然后将(算术)结果分配给指针。就像你说的那样:

const char *txt = 'a';

没有意义。您可能正在寻找的只是

txt = &txt[0];

,乍一看,可能看起来设置txt指向txt的第一个元素,但请记住,txt[0]只是*(txt + 0),或*txt&*txt简化为txt,因此您可以有效地执行:

txt = txt;

或者什么也没有。你得到相同的指针。使用我描述的两种方法之一。

答案 1 :(得分:3)

指针没有“开头”。有时你递增一个指针(或递减,或以任何其他方式改变),你会得到一个新的,完全独立的指针值,它没有旧指针值的“内存”,与旧指针值无关。

如果需要恢复旧的指针值,则必须记住该值或记住更改(以便稍后可以回滚)。没有其他方法可以恢复旧值。

答案 2 :(得分:0)

你不能,不是没有计数,因为它是一个指针,所以当你增加指针时你实际上离开了现在它指向丢失那个信息。

比较
int a[10] = {0};
int *p = NULL;

p = a; // start of array
++p;   // p points to a + 1
++p;   // p points to a + 2, 
       // .. but there is no intrinsic information in 'p' where start of 'a' is.

答案 3 :(得分:0)

最简单的方法是使用另一个值来保存原始0索引。我不认为你可以实际解决“第一”,除非它像一个排序的数据结构。