【发布时间】:2014-07-15 04:58:41
【问题描述】:
#include<stdio.h>
int main(){
char *ptr="Helio";
ptr++;
printf("%s\n",ptr);
//*ptr++;
printf("%c\n",++*ptr);/*Segmentation fault on GCC*/
return 0;
}
Q1) 这在 Turbo C++ 中运行良好,但在 GCC 上会出现分段错误。我没有得到确切的原因。
可能运算符优先级是原因之一。
Q2) 每个编译器都有不同的运算符优先级吗?
正如我所见,here ++ 的优先级高于取消引用运算符。可能是 GCC 和 Turbo C++ 对待它们的方式不同。
【问题讨论】:
-
不,这是因为您指向一个常量字符串,但您取消引用第一个字符
-
你想增加ptr或ptr[0]中的值吗?
-
运算符优先级不可能是问题...
(++*)ptr语法无效! -
@MattMcNabb 但它会在注释掉的行中有所不同,没有括号它相当于
*(ptr++)。也许这就是令人困惑的地方,两种形式之间的行为完全不同。