下面的代码是什么意思?我以为这是编译错误.但是没有发生编译错误.
int main()
{
const int a=1;
printf("%c", ++a["Gyantonic"]);
}
Run Code Online (Sandbox Code Playgroud)
Linux a中的输出是分段错误.如果a[1]给出代替,则给出编译错误++a["Gyantonic"].
它是如何工作的?
++a["Gyantonic"]
Run Code Online (Sandbox Code Playgroud)
相当于:
++(a["Gyantonic"])
Run Code Online (Sandbox Code Playgroud)
这相当于
++("Gyantonic"[a])
Run Code Online (Sandbox Code Playgroud)
相当于
++("Gyantonic"[1])
Run Code Online (Sandbox Code Playgroud)
"Gyantonic"[1]收益'y'和++增量'y'存储在字符串文字中并产生结果.但是"Gyantonic"字符串文字和字符串文字是不能修改的.这就是你得到分段错误的原因.