当我使用++时为什么会出现seg错误但是当我使用'1 +'时却没有?

时间:2013-06-28 03:04:34

标签: c++ segmentation-fault operators char-pointer

请解释为什么我使用++运算符获得segfault。显式添加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  

} 

2 个答案:

答案 0 :(得分:8)

因为你试图增加常数。

char* p = (char*) "hello";  // p is a pointer to a constant string.
cout << ++(*p) << endl;     // try to increment (*p), the constant 'h'.
cout << 1 + (*p) << endl;   // prints 105 because 1 + 'h' = 105

换句话说,++运算符会尝试增加p指向的字符,然后将原始值替换为新值。这是非法的,因为p指向常数字符。另一方面,简单地添加1不会更新原始字符。

答案 1 :(得分:2)

您无法修改C风格的字符串文字。这就是++(*p)正在做的事情。