3

请解释为什么我使用 ++ 运算符得到段错误。显式加 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  

} 
4

2 回答 2

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 不会更新原始字符。

于 2013-06-28T03:09:33.587 回答
2

您不能修改 C 样式的字符串文字。这就是++(*p)正在做的事情。

于 2013-06-28T03:07:59.533 回答