我知道,你可以採取一個指針,如:返回一個指針的開始?
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