我知道,你可以采取一个指针,如:返回一个指针的开始?
someFunction(const char* &txt)
{
txt++; //Increment the pointer
txt--; //Decrement the pointer
}
我怎么回指针的开始? (不计我的增量数和递减的量),我在想是这样的:
txt = &(*txt[0]);
但是,这并不似乎工作(分配指向其起始位置)。
任何帮助,将不胜感激
布雷特
我知道,你可以采取一个指针,如:返回一个指针的开始?
someFunction(const char* &txt)
{
txt++; //Increment the pointer
txt--; //Decrement the pointer
}
我怎么回指针的开始? (不计我的增量数和递减的量),我在想是这样的:
txt = &(*txt[0]);
但是,这并不似乎工作(分配指向其起始位置)。
任何帮助,将不胜感激
布雷特
你不能。你必须要么保存它的原始位置:
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;
还是一无所获。你得到相同的指针。使用我描述的两种方法之一。
你不能不计算,因为它是一个指针,所以当你增加指针时,你实际上离开了它指向失去该信息的地方。
比较与
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.
的最简单的方法是使用另一个值保存原始0索引。我不认为你实际上可以解决“第一”,除非它像一个有序的数据结构。
指针没有“开始”。每当你增加一个指针(或减少或以其他方式改变)时,你会得到一个新的,完全独立的指针值,它没有旧指针值的“记忆”,也没有与旧指针值的关系。
如果您需要恢复旧的指针值,您必须记住该值或记住更改(以便您可以稍后再回滚)。没有其他方法可以恢复旧价值。
Hrm,好吧,这很有道理,为什么我没有找到它的运气! – Brett 2011-03-14 04:51:21
@布雷特 - 我在你的“方法”上详细阐述了一点,我希望这不是太混乱。当你第一次遇到指针时,指针会非常困难,所以如果有什么不清楚的地方,请告诉我,我会再试一次。 – 2011-03-14 04:55:10
+1。很好,完整的答案。 – 2011-03-14 05:11:56