請解釋爲什麼我使用++運算符來獲得段錯誤。明確加1和使用++運算符有什麼區別?爲什麼我在使用++時遇到seg故障,但在使用「1 +」時不會出現故障?
using namespace std;
#include <iostream>
int main() {
char* p = (char*) "hello";
cout << ++(*p) << endl; //segfault
cout << 1 + (*p) << endl; // prints 105 because 1 + 'h' = 105
}
'++(* p)'嘗試修改字符串本身。你不能這樣做,因爲它是一個字符串。鑄造到'char *'(來自它的原始'const char *')首先是錯誤的。 – jogojapan
我不認爲這完全正確。在閱讀下面這個人的回答之後,我想我實際上是在嘗試修改字符字面值,而不是字符串字面值,因爲在我實際調用++運算符之前(* p)返回字符'h'。 –
你的代碼中只有一個文字:'「hello」'(除了'1',但這不相關),這是一個字符串文字。 '* p'指向該文字中的一個字符的地址。您嘗試修改地址指向的值。如果您要成功完成此操作,您將修改該字符,因此 - 因爲它是您的代碼中定義的字符串字面值的一部分 - 您將會修改字符串字面值。 – jogojapan