#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++指向字符數組
#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++指向字符數組
當您設置一個指向s-1
,指針指向字符在內存中的位置,那是你分配的字符串前一個char
。解引用這樣的指針是未定義的行爲 - 程序可能會打印任何內容,甚至崩潰。
換句話說,這不是一件好事嗎? – user2510809
@ user2510809正確 - 未定義的行爲是不對的。調用未定義行爲的程序被認爲是無效的。 – dasblinkenlight
first
將指向一塊未分配的內存 - 這種行爲是未定義
'char * first = s - 1'指向垃圾? – Brian
這是UB。你看到整個數組的原因是你忘記在字符串的末尾添加\ 0。 – Borgleader