int main() {
char **k;
char *s ="abc";
char *b ="def";
k = &s;
k++;
k = &b;
cout<<*(k - 1)<<endl; // nothing but newline. Shouldn't I get "abc"?
//EDIT: corrected a typo should be *(k - 1)
}
我什麼也沒有,但從cout
newline
。當我查看char *的行爲時,我得到的印象是,因爲我有第一個字符的地址,所以我可以像char *一樣使用char *,這是真的。但是,對於char **,這種行爲似乎完全不同,當我嘗試k ++時,它看起來不像數組。這是爲什麼?另一個小內存C++問題
當我試過(K + 1)=&b;我有一個錯誤,爲什麼我不能那樣做?
「現在它指向位於它所指向的char *旁邊的char *。」既然我用k ++先進k,不應該(k-1)是k? – Mark
它會是,除了你在這之間做了這個任務:'k =&b;'。現在k指向b的地址,所以當你執行'k-1'時,它指向位於b之前的'char *'(沒有一個),所以當你打印它時會得到垃圾(或者它會讓你的程序崩潰)。 – Praetorian
解釋了一切,謝謝你的回答 – Mark