我知道您可以使用指针,例如:
someFunction(const char* &txt)
{
txt++; //Increment the pointer
txt--; //Decrement the pointer
}
如何回到指针的开头? (不计算我的增量数量并减少该数量)我在考虑类似的事情:
txt = &(*txt[0]);
但这似乎不起作用(将指针指定给它的起始位置)。
非常感谢任何帮助
布雷特
答案 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索引。我不认为你可以实际解决“第一”,除非它像一个排序的数据结构。