2013-07-02 20 views
2
#include<iostream> 

using namespace std; 



int main(){ 

char s[10] = "abcde"; 

char* first = s - 1; 

cout << first << endl; 

return 0; 
} 

當我運行這個時,我在控制檯中得到一個空白,但是當我說* first = s;我得到整個字符數組打印到我的控制檯。我的問題是,當我將它設置爲s - 1時,首先指的是什麼?C++指向字符數組

+2

'char * first = s - 1'指向垃圾? – Brian

+1

這是UB。你看到整個數組的原因是你忘記在字符串的末尾添加\ 0。 – Borgleader

回答

4

當您設置一個指向s-1,指針指向字符在內存中的位置,那是你分配的字符串前一個char。解引用這樣的指針是未定義的行爲 - 程序可能會打印任何內容,甚至崩潰。

+0

換句話說,這不是一件好事嗎? – user2510809

+0

@ user2510809正確 - 未定義的行爲是不對的。調用未定義行爲的程序被認爲是無效的。 – dasblinkenlight

0

first將指向一塊未分配的內存 - 這種行爲是未定義